我有以下shell脚本(在带有BusyBox的嵌入式系统上运行):
#!/bin/sh
yes | tr \\n x | grep n &
PIDOFYES=$(pidof 'yes')
ps | grep yes
kill -STOP $PIDOFYES
结果:
factory@hostname:/media/card$ ./test.sh
20342 factory 3832 R yes
20351 factory 3832 S grep yes
然后,如果我手动检查,则可以看到yes进程处于活动状态并且处于预期的停止状态:
factory@hostname:/media/card$ ps | grep yes
20342 factory 3832 T yes
20400 factory 3832 S grep yes
如果我在同一脚本的末尾附加另一个ps
,就会发生有趣的事情:
#!/bin/sh
yes | tr \\n x | grep n &
PIDOFYES=$(pidof 'yes')
ps | grep yes
kill -STOP $PIDOFYES
ps | grep yes
结果:
factory@hostname:/media/card$ ./test.sh
22337 factory 3832 R yes
22346 factory 3832 S grep yes
22337 factory 3832 T yes
22352 factory 3832 S grep yes
到目前为止,一切似乎都不错,但是当我手动检查ps
时,就不再存在“是”过程:
factory@hostname:/media/card$ ps | grep yes
22373 factory 3832 S grep yes
似乎在脚本末尾添加ps | grep yes
会终止该过程。这是正确的吗?这怎么可能?