2013-02-11 3 views
0

У меня есть процессы, которые после запуска связываются с адресом и портом. Эти процессы запускаются на экране с использованием exec, так что экран закрывается, когда дочерний процесс закрывается.Bash: Failsafe kill для процесса, связанного с IP-адресами

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

Я также читал, что SIGKILL оставляет открытые сокеты открытыми, занесенными в память памятью, случайными ресурсами в использовании, поэтому я обратился к простому kill PID, который является SIGTERM.

Является ли SIGTERM гарантией, что процесс может отвязаться от адреса и порта, или есть лучшая альтернатива?

ответ

1

Если вы используете SIGKILL для всех процессов, поддерживающих открытый порт прослушивания, он будет закрыт.

Однако, он может не закрываться в течение нескольких минут, пока он находится в состоянии TIME_WAIT, как того требует спецификация TCP (чтобы слушатели знали, что порт закрыт, если они пропускают исходный закрывающий пакет).

Хорошо организованные серверы откроют сокет с возможностью SO_REUSEADDR, позволяя ему немедленно восстановить тот же порт при перезагрузке, но это специфично для приложения. Без него порт будет использоваться в течение нескольких минут.