У меня есть следующий сценарий оболочки (запущенный во встроенной системе с 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
Затем, если я проверю вручную, я вижу, что дапроцесс жив и остановлен, как и ожидалось:
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
в концесценария убивает процесс.Это правильно?Как это возможно?