命令行中执行了一个shell命令
➜ ~ while true; do echo hello;sleep 1; done
hello
hello
...
怎么查看这个shell命令的进程号呢?
# 查不到
ps -ef|grep 'while'
命令行中执行了一个shell命令
➜ ~ while true; do echo hello;sleep 1; done
hello
hello
...
怎么查看这个shell命令的进程号呢?
# 查不到
ps -ef|grep 'while'
其实把这条命令放入后台执行就会创建子shell执行命令,可以看到他的进程ID了,也就是末尾加&。再用
ps -e
发现,这条命令会创建两个子进程,一个名称是你的shell程序的名字(我的是zsh
),另一个是sleep
。如果不放到后台执行,那么当前shell就会执行你的
while
循环和echo
命令,这些都不需要创建子shell。当执行sleep
时会创建子进程,sleep
进程不断地创建删除,你在不同的时候执行ps -e | grep sleep
会发现进程Id不一样。也就是说,shell执行命令不一定会创建子shell进程(对于內建命令),外部命令一般才交给子shell执行。