PS в сценарии оболочки завершает фоновый процесс, запущенный тем же сценарием - PullRequest
0 голосов
/ 25 января 2019

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

...