1

Используя Putty на моем компьютере с Vista, я вошел на свой сервер разработки (Ubuntu) и запустил тестовый сервер Django. Он запускает сервер, похожий на apache, для тестирования моего веб-приложения. Приложение работает на моем внутреннем IP-адресе, на порте 8080. Я могу открыть его через веб-браузер и перейти к 192.168.0.130:8080 .

Я оставил свой компьютер на некоторое время (физически) и вернулся, чтобы выяснить, что время соединения с замазкой истекло. Ничего страшного, я только что вернулся на сервер. Однако, когда я пытаюсь запустить тестовый сервер Django сейчас, он говорит, что порт уже используется. Это означает (я думаю), что первый экземпляр тестового сервера все еще работает на порту 8080.

Как мне убить этот процесс? Как выглядит этот процесс? Я сделал ps aux и у меня есть ощущение, что это оскорбительный процесс:

garfonzo    5719  0.3  0.0      0     0 ?        D    08:58   1:07 [python]

С тех пор, как я запустил сервер этим утром примерно в то же время, Django основан на python Однако выполнение kill 5719 ничего не дает - процесс не завершен, и я все еще не могу запустить тестовый сервер.

Есть идеи!?

РЕДАКТИРОВАТЬ - для более подробной информации:

Я также запустил netstat -tulpn и получаю следующее:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.1.130:8080      0.0.0.0:*               LISTEN      -

Разве это не удобно, у одного порта, который я хочу знать, идентификатор процесса не имеет PID!

1 ответ1

1

Если вы уверены, что это правильный процесс (что кажется вероятным) - и поскольку netstat не говорит вам ничего полезного, вы можете использовать

kill -9 5719 

Ключ -9 посылает сигнал SIGKILL, а не сигнал SIGTERM по умолчанию, который остановит процесс, если его можно остановить.

Сигнал SIGTERM отправляется процессу и фактически запрашивает его отключение. Процесс может выбрать перехват SIGTERM и сделать что-то еще полностью.

С другой стороны, сигнал SIGKILL не поступает в процесс и поэтому не может быть проигнорирован. Ядро немедленно завершает процесс, поэтому его следует использовать только в качестве крайней меры, поскольку оно не дает процессу возможности очиститься.

Если процесс заблокирован, то его нельзя остановить с помощью SIGKILL, в этом случае это процесс зомби, и для его очистки может потребоваться перезагрузка.

Проработка: процесс не может быть остановлен, если он ожидает ввода / вывода, так как это может привести к зависанию функции ядра, которая выполняет ввод / вывод.

Или, если родительский процесс не вызывает wait , процесс останется процессом зомби. Хорошая сводка мертвых процессов находится по адресу http://www.linuxsa.org.au/tips/zombies.html.

Что это за зомби-процессы, которые появляются в пс? Я убиваю их, но они не уходят!

Зомби - это мертвые процессы. Вы не можете убить мертвых. Все процессы в конечном итоге умирают, и когда они это делают, они становятся зомби. Они почти не потребляют ресурсов, чего и следовало ожидать, потому что они мертвы! Причиной для зомби является то, что родитель (процесс) зомби может получить информацию о состоянии выхода из зомби и статистику использования ресурсов. Родитель сообщает операционной системе, что зомби больше не нужен, используя один из системных вызовов wait ().

Когда процесс умирает, все его дочерние процессы становятся дочерними для процесса номер 1, который является процессом init. Init - это «всегда», ожидая смерти детей, чтобы они не оставались зомби.

Если у вас есть процессы зомби, это означает, что их родители не ожидали этих зомби (посмотрите на PPID, отображаемый ps -l). У вас есть три варианта: исправить родительский процесс (заставить его ждать); убить родителя; или жить с этим. Помните, что жить с этим не так сложно, потому что зомби занимают чуть больше одной дополнительной строки в выводе ps.

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