“уничтожьте <PID>” не действительно уничтожение процесса, почему?

Я пытаюсь улучшить свои навыки командной строки, и я встретился с проблемой, где я не могу уничтожить процесс. Я ввожу kill 2200 где 2200 мой PID, и процесс не уничтожается. После того, как ожидание нескольких минут находится все еще в top и ps aux. Я даже попытался ввести его с sudo - никакие результаты.

Какие-либо идеи, почему это было бы похоже на это?


Править

Я нашел странную зависимость, где fg обновления список процессов:

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2202 pts/0    00:00:00 top
 2258 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2620 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2621 pts/0    00:00:00 ps
118
задан 6 June 2016 в 05:26

7 ответов

Процессы могут проигнорировать некоторые сигналы. При отправке SIGKILL, он не сможет проигнорировать его (и никакая выгода он, чтобы сделать очистки). Попробуйте:

kill -9 {PID}

Узнайте больше, читая страницу руководства:

man kill
180
ответ дан 22 November 2019 в 22:58

Несмотря на он - имя, уничтожают, на самом деле не уничтожает процессы, это отправляет сигналы в него. Из страницы справочника:

kill - send a signal to a process

Сигнал по умолчанию, отправленный kill [pid] SIGTERM, который обычно, но не обязательно просит, чтобы процесс завершился. Довольно возможно записать программу, которая играет счастливую мелодию, когда Вы отправляете сигнал SIGTERM в него, но не рекомендуемые.

Другой общий сигнал является SIGHUP, который часто используется, чтобы попросить, чтобы программа перечитала свои конфигурационные файлы.

Если Вы действительно хотите закрыть программу, необходимо использовать сигнал SIGKILL путем выполнения kill -9 [pid].

7
ответ дан 22 November 2019 в 22:58

Это кажется, что Вы могли бы приостанавливать процесс (возможно, путем нажатия Ctrl-Z в терминале). В этом состоянии Ваш процесс не ответит на SIGTERM, поскольку это замораживается. Выполнение 'fg' тает процесс, таким образом, это может уловить сигнал и самооконечный. Это могло объяснить, почему 'fg', кажется, обновляет список процессов.

2
ответ дан 22 November 2019 в 22:58

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

Можно также "отправить" сигнал номер 9 (SIGKILL) это не может быть проигнорировано процессом. Процесс даже не распознает его, потому что ядро заканчивает процесс, не сам процесс. Это - злой путь.

Каждый говорит kill -9 <pid> всегда работы. Это - заблуждение. Существуют ситуации где даже kill -9 не уничтожает процесс. Например, когда процесс имеет состояние D (непрерываемый сон). Процесс входит в это состояние каждый раз, это ожидает ввода-вывода (обычно не очень долго). Так, если процесс ожидает ввода-вывода (на дефектном жестком диске, например), и он не программируется правильно (с тайм-аутом), затем Вы просто не можете уничтожить процесс. Независимо от того, что Вы делаете. Просто можно попытаться сделать файл доступным, который продолжает процесс.

42
ответ дан 22 November 2019 в 22:58

Из C++ я выполнился:

kill(4024, SIGKILL);

И на Linux (Ubuntu) терминал,

$ ps -ax | grep my_su

Вывод был:

4024 pts/1    Z+     0:00 [my_subscriber] <defunct>

По-видимому, это (4024) все еще выживание. Однако, как только я завершил родительский процесс, который звонил, вышеупомянутое "уничтожают" оператор, 4024 больше не появлялся. Теперь я сужу, что "более не существующий" процесс является не чем иным как строкой, отображенной и решительной для игнорирования его. Я надеюсь, что мой опыт мог помочь кому-то там.Удачи!

0
ответ дан 22 November 2019 в 22:58

Также можно использовать kill -l чтобы отобразить поддерживаемые сигналы Вашей архитектурой и узнать больше о сигнале, можно хотеть использовать для надлежащей отправки сигнала.

Примечание: поскольку другие, возможно, упомянули, использование kill -9 {PID} не рекомендуется, если это не процесс-зомби. после того как процесс получает SIGKILL, сразу завершит работу, не убирая или никакие другие надлежащие процедуры.

0
ответ дан 22 November 2019 в 22:58

Это - то, что я раньше обирал, localhost, работающие на порте 80 (Угловым cli), Получают информацию о запущенном приложении о порте 80

sudo lsof -i tcp:80

After That 
sudo kill -9 3348

где 3348 pid рабочего процесса

0
ответ дан 22 November 2019 в 22:58

Другие вопросы по тегам:

Похожие вопросы: