如何获得进程PID


运行环境:openwrt 12.09
在linux shell下,执行以下代码:
sleep 50 && firstboot && reboot &
我使用echo $!获得的进程ID和PS查看的进程ID不一样
所以请教怎么获得sleep的PID?谢谢

openwrt

半人半灵的庭师 10 years, 4 months ago

特意查了一下《UNIX环境高级编程》第2版第9章一节:9.9 shell执行程序,其中讲到如果在shell中执行如:


 cat1 xxx | cat2 &

执行以上命令之后,shell打印出来的PID跟用 echo $! 打印出来的PID一样,这个PID并不是cat1的PID,而是cat2的PID,shell在处理这种管道连接的命令时,它是先创建最后一个命令的进程(即cat2),然后在cat2进程中,创建前面命令的进程,所以cat1是cat2的子进程,故 ps aux | grep cat1 查看到的cat1的PID跟 echo $!(其实是cat2的PID) 查看到的不一样。

我用&&符号也在shell做了类似的测试,发现结果跟我上面说的一致,也就是说无论用&&还是管道,shell处理的方式一样。

RachelC answered 10 years, 4 months ago

Your Answer