Як і у наведених вище відповідях, найсильнішим способом припинення будь-якого процесу є SIGKILL
, наприклад kill -9 process_id
.
Однак існують процеси, яких просто неможливо Force Quit
ні kill
. Вони називались zombie
процесами.
Ось короткий сценарій, що створить zombie
процес протягом двох хвилин:
perl -e 'if($p=fork) {print "unkillable pid:$p\n" ;system("ps -l"); sleep(120)}'
Запустіть вищезгаданий сценарій у Терміналі, і ви отримаєте вихід, як наступний:
unkillable pid:50571
UID PID PPID F CPU PRI NI SZ RSS WCHAN S ADDR TTY TIME CMD
501 47380 47379 4006 0 31 0 2448416 2900 - S 0 ttys000 0:00.36 -bash
501 50570 47380 4006 0 31 0 2443512 1424 - S+ 0 ttys000 0:00.01 perl -e if($p=fork) {print "u
#THIS-> 501 50571 50570 2006 0 0 0 0 0 - Z+ 0 ttys000 0:00.00 (perl)
501 12795 12794 4006 0 31 0 2448296 1752 - S+ 0 ttys001 0:00.75 -bash
501 50123 50122 4006 0 31 0 2448296 2688 - S+ 0 ttys002 0:00.14 -bash
Якщо ви перевіряєте стовпчик статусу для процесу, який не можна скасувати (у даному випадку: 50571), ви бачите Z
прапор, що означає zombie
.
Ви можете спробувати надіслати будь-який kill
сигнал (наприклад kill -9 50571
), і процес все ще буде існувати. У будь-якому випадку це не сильно шкодить вашій системі, оскільки насправді її немає - займає лише таблицю процесів.
У наведеному вище прикладі через 120 секунд він очиститься.