Неявное уничтожение фоновых процессов, связанных с процессом переднего плана
В Bash я запускаю ряд процессов, выполняющихся в фоновом режиме, а Bash ожидает на переднем плане:
sleep 7 & sleep 10 & wait
(Это на самом деле упрощение того, что npm script
делает, что является применением этого вопроса.)
Тогда всякий раз, когда я Ctrl+C
вне wait
процесс, я бы хотел, чтобы все фоновые процессы были убиты.
Это вообще возможно? Как?
1 ответ
Решение
Фоновые процессы являются дочерними процессами оболочки, но не дочерними процессами wait
так что нет хорошего способа распространения сигнала на wait
к любому из других процессов.
Быстрый и грязный способ убить все фоновые процессы, которые вы можете поместить в сценарий или псевдоним,
kill -INT $(jobs -l | awk '{print $2}')
kill -INT $(jobs -p)