1

Я запускаю сценарий Bash в качестве фоновой работы. Скрипт bash вызывает трудоемкий исполняемый файл. Если я не ошибаюсь, запуск сценария bash является родительским процессом, а запуск исполняемого файла - дочерним процессом.

Теперь я хочу остановить весь процесс, убив родительский процесс, который является фоновым заданием

kill -9 $(jobs -p)

Терминал показывает, что выполнение bash-скрипта завершено. Но запуск исполняемого файла все еще зависает на выходе top. Мне просто интересно, как убить также дочерний процесс?

2 ответа2

1

Используйте отрицательный PID, который приведет к уничтожению группы процессов. -- Скажите kill, что остальные аргументы не являются переключателями параметров, поэтому дефис (минус) перед идентификатором PID не перепутает его.

kill -- -12345

Кроме того, -9 это последнее средство. Не используйте его, пока не попробуете хотя бы -15 (SIGTERM, по умолчанию). Это дает программе возможность вести домашнюю работу до ее выхода. См. Когда я должен использовать kill -9 или Бесполезное использование kill -9 или kill -9.

0

killall может дать вам лучшие результаты.

Предупреждение: killall ведет себя по-разному на разных * nix'ах. В Linux он будет убивать процессы с заголовками, соответствующими аргументу. В Solaris он убивает КАЖДЫЙ процесс, а не только те, которые вы указали. Таким образом, в Solaris запуск killall от имени root эффективно завершит работу компьютера. Убедитесь, что вы знаете, как следует команда

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .