Я пытаюсь улучшить свои навыки командной строки, и я столкнулся с проблемой, когда я не могу завершить процесс. Я набираю, 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
command-line
process
Patryk
источник
источник
top
(как указано в редактировании). Я просто хотел попытаться заставить программу работать в фоновом режиме, а затем вернуть ее обратно.fg
илиbg
для процесса)Ответы:
Процессы могут игнорировать некоторые сигналы. Если вы отправите SIGKILL, он не сможет игнорировать его (и не поймать его для очистки). Пытаться:
Узнайте больше, прочитав страницу руководства:
источник
kill -9
как не работает, и процесс все еще торчит?Если
kill
вызывается без какого-либо параметра, он отправляет сигнал номер 15 (SIGTERM
). Этот сигнал может быть проигнорирован процессом. Этот сигнал уведомляет процесс, чтобы очистить его вещи, а затем закончить правильно сам. Это хороший способ.Вы также можете «отправить» сигнал номер 9 (
SIGKILL
), который не может быть проигнорирован процессом. Процесс даже не распознает его, потому что ядро завершает процесс, а не сам процесс. Это злой путь.Один говорит, что
kill -9 <pid>
всегда работает. Это заблуждение . Бывают ситуации, когда дажеkill -9
не убивает процесс. Например, когда процесс находится в состоянииD
(непрерывный сон). Процесс переходит в это состояние каждый раз, когда он ожидает ввода-вывода (обычно не очень долго). Таким образом, если процесс ожидает ввода-вывода (например, на жестком диске с дефектом) и он не запрограммирован должным образом (с тайм-аутом), то вы просто не сможете завершить процесс . Неважно, что ты делаешь. Вы можете просто попытаться сделать файл доступным, чтобы процесс продолжался.источник
Несмотря на то, что это имя действительно не уничтожает процессы, оно посылает ему сигналы. Со страницы руководства:
kill - send a signal to a process
Сигнал по умолчанию посланный
kill [pid]
является SIGTERM , который обычно , но не обязательно просит прекратить процесс. Вполне возможно написать программу, которая воспроизводит счастливую мелодию, когда вы посылаете на нее сигнал SIGTERM , но не рекомендуется.Другим распространенным сигналом является SIGHUP, который часто используется, чтобы попросить программу перечитать свои файлы конфигурации.
Если вы действительно хотите убить программу, вам нужно использовать сигнал SIGKILL
kill -9 [pid]
.источник
Похоже, вы можете приостановить процесс (возможно, нажав Ctrl-Z в терминале). В этом состоянии ваш процесс не будет отвечать на SIGTERM, поскольку он заморожен. Запуск 'fg' оттаивает процесс, так что он может принять сигнал и завершиться самостоятельно. Это может объяснить, почему появляется «fg» для обновления списка процессов.
источник
Из C ++ я выполнил:
И на терминале Linux (Ubuntu),
Выход был:
Похоже, это (4024) еще сохранилось. Однако, как только я завершил родительский процесс, который вызвал приведенный выше оператор kill, 4024 больше не появлялся. Теперь я считаю, что «несуществующий» процесс - это не более чем отображаемая строка и решил ее игнорировать. Я надеюсь, что мой опыт может помочь кому-то там. Ура!
источник
Вы также можете использовать
kill -l
для отображения поддерживаемых сигналов вашей архитектурой и узнать больше о сигнале, который вы можете использовать для правильной отправки сигнала.Примечание: как уже упоминалось, использование
kill -9 {PID}
не рекомендуется, если это не процесс зомби. как только процесс получает SIGKILL, он немедленно отключается без очистки или каких-либо других надлежащих процедур.источник
Это то, что я использовал для пилюли localhost, работающего на порту 80 (по угловой Cli) Получить информацию о запущенном приложении на порту 80
где
3348
pid запущенного процессаисточник