Иногда отправка SIGTERM процессу приводит к отправке SIGTERM всем его дочерним процессам. Однако иногда это не работает.
Есть ли команда или утилита, которая позволит мне убить процесс и все его дочерние процессы одновременно? Я обычно прибегаю к ручному сбору всех пидов в одну команду на убийство, но это глупо.
Этот ТАК вопрос спрашивает, как сделать это с Perl, но все, что делает работу, было бы здорово.
pkill -9
это более мощный, чемpkill
по любой причине.Ответы:
Этот ТАК вопрос охватывает это.
источник
Предполагая, что процессы совместно используют идентификатор сеанса (что они должны делать, если они явно не вызвали setsid (), вы можете уничтожить их с помощью сеанса, используя pkill:
Если из другого терминала я делаю:
Тогда все умирает одним махом.
Аналогичным образом можно выполнить уничтожение по группам процессов, хотя это имеет тенденцию быть более полезным для многих дочерних элементов, которые находятся на один уровень ниже родительского, а не цепочки связанных процессов.
источник
Как правило, отвечающий клиент должен получить sigterm и отключиться сам, тем самым завершив все его разветвленные дочерние процессы. Если, с другой стороны, клиент не отвечает, нормальный сигнал завершения, вероятно, не вызовет ответа.
Затем вы продолжаете посылать сигнал SIGKILL, который говорит самой системе «Сделать этот процесс остановленным сейчас», что он может делать большую часть времени, за исключением случаев, когда процесс находится в состоянии непрерывного сна, например, ожидание некоторого ввода-вывода. вход или аналогичный.
В этом случае, даже SIGKILL ничего не сделает с процессом; дочерний процесс, вероятно, будет в аналогичном состоянии отсталости.
Существует граничный случай, когда родительский процесс может просто красиво завершиться, но дочерний процесс не подлежит уничтожению. Тогда вы закончите с процессом зомби, который не может быть очищен, так как его отец ушел, но он не реагирует ни на что. Единственный способ избавиться от них - перезагрузка; однако в большинстве случаев они совершенно безвредны, поскольку единственное, что они делают, - это получают PID, в то время как сокет, который они пытались использовать, уже иссяк.
источник
Если я хочу уничтожить дерево процессов Firefox, то можно ли его уничтожить с помощью приведенной выше команды "pkill -9 -s firefox"
источник