哪些系统命令不会启动独立进程?cd、more、less是否在此列?
关于不启动独立进程的Shell命令解答
嘿,这个问题抓得很准——很多人容易混淆Shell内置命令和外部命令的区别,毕竟前者是直接在当前Shell进程里跑,不会新开进程,后者则会fork出独立的子进程。
先给你明确:这类命令叫Shell内置命令(Built-in Commands),除了你提到的cd,日常常用的还有不少:
echo:多数Shell(比如Bash)默认用内置版本,直接在当前进程输出文本(当然也有独立的二进制版,但一般优先用内置)pwd:打印当前工作目录,几乎所有主流Shell都是内置实现export/unset:用来设置或删除环境变量,必须是内置的——因为要直接修改当前Shell进程的环境,要是开新进程改就白搭了alias/unalias:定义或取消命令别名,操作的是当前Shell的配置,自然是内置source(或简写.):执行脚本内容到当前Shell,要是开新进程的话,脚本里改的环境变量出了脚本就没了,所以肯定是内置history:查看命令历史,依赖Shell自己维护的历史记录,内置无疑exit:退出当前Shell,直接操作当前进程,内置jobs/fg/bg:管理后台作业,这是Shell的作业控制功能,全部是内置
至于你问的more和less——它们不属于内置命令,执行时会启动独立进程。你可以自己验证:在Shell里敲type more,会返回类似more is /usr/bin/more的结果(显示它是一个独立的二进制文件);而敲type cd,会得到cd is a shell builtin,这就是内置命令的标志。
小技巧:以后不确定一个命令是不是内置的,用type <命令>或者command -v <命令>就能快速判断,前者会明确标注类型,后者如果是内置命令会直接返回命令名,外部命令则返回它的文件路径。
内容的提问来源于stack exchange,提问作者Mohamed Traore
相关产品推荐
相关产品推荐

