Shell脚本中的ps结束了由同一脚本启动的后台进程

时间:2019-01-25 16:17:43

标签: shell scripting busybox ps

我有以下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会终止该过程。这是正确的吗?这怎么可能?

0 个答案:

没有答案