Я пытаюсь улучшить свои навыки командной строки, и я встретился с проблемой, где я не могу уничтожить процесс. Я ввожу 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
Процессы могут проигнорировать некоторые сигналы. При отправке SIGKILL, он не сможет проигнорировать его (и никакая выгода он, чтобы сделать очистки). Попробуйте:
kill -9 {PID}
Узнайте больше, читая страницу руководства:
man kill
Несмотря на он - имя, уничтожают, на самом деле не уничтожает процессы, это отправляет сигналы в него. Из страницы справочника:
kill - send a signal to a process
Сигнал по умолчанию, отправленный kill [pid]
SIGTERM, который обычно, но не обязательно просит, чтобы процесс завершился. Довольно возможно записать программу, которая играет счастливую мелодию, когда Вы отправляете сигнал SIGTERM в него, но не рекомендуемые.
Другой общий сигнал является SIGHUP, который часто используется, чтобы попросить, чтобы программа перечитала свои конфигурационные файлы.
Если Вы действительно хотите закрыть программу, необходимо использовать сигнал SIGKILL путем выполнения kill -9 [pid]
.
Это кажется, что Вы могли бы приостанавливать процесс (возможно, путем нажатия Ctrl-Z в терминале). В этом состоянии Ваш процесс не ответит на SIGTERM, поскольку это замораживается. Выполнение 'fg' тает процесс, таким образом, это может уловить сигнал и самооконечный. Это могло объяснить, почему 'fg', кажется, обновляет список процессов.
Если kill
вызывается без любого параметра, он отправляет сигнал номер 15 (SIGTERM
). Этот сигнал может быть проигнорирован процессом. Этот сигнал уведомляет процесс, чтобы очистить его вещи и затем закончиться правильно один. Это - хороший путь.
Можно также "отправить" сигнал номер 9 (SIGKILL
) это не может быть проигнорировано процессом. Процесс даже не распознает его, потому что ядро заканчивает процесс, не сам процесс. Это - злой путь.
Каждый говорит kill -9 <pid>
всегда работы. Это - заблуждение. Существуют ситуации где даже kill -9
не уничтожает процесс. Например, когда процесс имеет состояние D
(непрерываемый сон). Процесс входит в это состояние каждый раз, это ожидает ввода-вывода (обычно не очень долго). Так, если процесс ожидает ввода-вывода (на дефектном жестком диске, например), и он не программируется правильно (с тайм-аутом), затем Вы просто не можете уничтожить процесс. Независимо от того, что Вы делаете. Просто можно попытаться сделать файл доступным, который продолжает процесс.
Из C++ я выполнился:
kill(4024, SIGKILL);
И на Linux (Ubuntu) терминал,
$ ps -ax | grep my_su
Вывод был:
4024 pts/1 Z+ 0:00 [my_subscriber] <defunct>
По-видимому, это (4024) все еще выживание. Однако, как только я завершил родительский процесс, который звонил, вышеупомянутое "уничтожают" оператор, 4024 больше не появлялся. Теперь я сужу, что "более не существующий" процесс является не чем иным как строкой, отображенной и решительной для игнорирования его. Я надеюсь, что мой опыт мог помочь кому-то там.Удачи!
Также можно использовать kill -l
чтобы отобразить поддерживаемые сигналы Вашей архитектурой и узнать больше о сигнале, можно хотеть использовать для надлежащей отправки сигнала.
Примечание: поскольку другие, возможно, упомянули, использование kill -9 {PID}
не рекомендуется, если это не процесс-зомби. после того как процесс получает SIGKILL, сразу завершит работу, не убирая или никакие другие надлежащие процедуры.
Это - то, что я раньше обирал, localhost, работающие на порте 80 (Угловым cli), Получают информацию о запущенном приложении о порте 80
sudo lsof -i tcp:80
After That
sudo kill -9 3348
где 3348
pid рабочего процесса