8

На man page руководства это говорит:

          0      All processes in the current process group are signaled

И я попробовал так:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

Как я понял, kill 0 уничтожит все процессы в текущем процессе, включая pid15247 . Тем не менее, это ничего не сделало в этом примере. У кого-нибудь есть идеи о том, как его использовать?

2 ответа2

2

Я не смог найти примечание о том, как ведет себя kill 0 на моей странице man kill (debian).

Но у меня есть два комментария:

(1) "Группа процессов" может не соответствовать вашим ожиданиям. Вы можете отобразить ID группы процессов (PGID) с помощью ps -o "%p %P %r %c %a":

$ ps -o "%p %P %r %c %a"
  PID  PPID  PGID COMMAND         COMMAND
12124 12123 12124 zsh             -zsh
12212 12124 12212 man             man kill
12226 12212 12212 less            less
12302 12124 12302 ps              ps -o %p %P %r %c %a

Итак, man вместе с инструментом отображения пейджера (less) находится в той же группе процессов, но это отличается от команды оболочки (zsh в моем случае).

(2) Вероятно, есть две разные команды kill . Один из них встроен в bash (см. Bash (1), раздел "Команды сборки оболочек") и внешний /bin/kill . Эти двое могут вести себя по-разному! Вы можете явно указать, какой из них вы хотите запустить, введя builtin kill command kill или команду kill вместо kill . Внешнюю команду также можно запустить, указав путь: /bin/kill .

0

Чтобы остановить все ваши процессы и выйти из системы, введите:

kill -kill 0

Это посылает сигнал 9, сигнал SIGKILL, всем процессам, имеющим идентификатор группы процессов, равный идентификатору группы процессов отправителя. Поскольку оболочка не может игнорировать сигнал SIGKILL, это также останавливает оболочку входа и выходит из системы.

Это IBM AIX Manual, но, возможно, эта концепция применима.

Эта функциональность не существует в Linux "kill" (как я вижу); но вот как это "убивает" себя ведет

Убийство 0 не убивает пид 0. Вместо этого это опция в kill, чтобы убить все процессы в текущей группе. Своей командой вы убиваете все в идентификаторе группы процессов (GID) оболочки, выдавшей команду kill.

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