2017-01-09 3 views
1

У меня есть scriptA, который выполнит другой скрипт, который будет запускаться в фоновом режиме. Теперь мне нужно убедиться, что когда я убиваю scriptA (cmd + c), что фоновые процессы также убиты.Убивает фоновые процессы, когда существует скрипт

#!/bin/bash 
echo "This script is about to run another script." 
    sh ../processes/processb/bin/startserver.sh & 
FOO_PID=$! 
echo "This script has just run another script." $FOO_PID 

Этот скрипт выполняет хорошо, но когда я нажимаю Ctrl + C и сделать команду «пс» на значение FOO_PID, этот процесс до сих пор существует. Что я делаю не так?

UPDATE -----------

Так что я попытался ниже код, но все-таки процесс scriptC является не быть убитым. Я думаю, что это просто прекращает scriptA (родительский) при нажатии ctrl + c, и поэтому команда trap не выполняется?

 #!/bin/bash 

echo "This script is about to run another script." 

    ../common/samples/bin/scriptC.sh & 
mypid=$! 
kill -0 "$mypid" && echo "My process is still alive." 

echo "This script has just run another script." $mypid 

trap "kill $mypid && kill $$" INT 

ответ

3

Добавить trap для SIGINT:

trap "kill $FOO_PID && kill $$" INT 

или для какой-либо выход, обрабатывать псевдо сигнал EXIT:

trap "kill $FOO_PID && kill $$" EXIT 
+0

Спасибо heemayl, из любопытства не должны его так или иначе быть убитым, так как я не использовал «nohup» здесь? – user2894296

+0

@ user2894296 Это долгая история. В двух словах, фоновый процесс теперь запущен в своей собственной группе процессов, причем PID является PGID. – heemayl

Смежные вопросы