如何查看一个shell命令的进程号?

命令行中执行了一个shell命令

➜  ~ while true; do echo hello;sleep 1; done
hello
hello
...

怎么查看这个shell命令的进程号呢?

# 查不到
ps -ef|grep 'while'
阅读 6.2k
2 个回答

其实把这条命令放入后台执行就会创建子shell执行命令,可以看到他的进程ID了,也就是末尾加&。再用ps -e发现,这条命令会创建两个子进程,一个名称是你的shell程序的名字(我的是zsh),另一个是sleep

如果不放到后台执行,那么当前shell就会执行你的while循环和echo命令,这些都不需要创建子shell。当执行sleep时会创建子进程,sleep进程不断地创建删除,你在不同的时候执行ps -e | grep sleep 会发现进程Id不一样。

也就是说,shell执行命令不一定会创建子shell进程(对于內建命令),外部命令一般才交给子shell执行。

没试过,不过你可以尝试下,查询sh,ps -ef | grep sh ,因为你的命令是这样执行的:sh test.sh

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进