Если процесс убит сигкилом, как я могу запустить его снова? - PullRequest
3 голосов
/ 21 мая 2010

У меня есть процесс, который другие процессы пытаются убить, и, если им удастся это сделать, как я могу убедиться, что процесс запустится снова?

Ответы [ 5 ]

4 голосов
/ 21 мая 2010

Выезд inittab . Ищите респауна:)

Процесс будет перезапущен всякий раз, когда это заканчивается

Вот пример из моего собственного inittab:

c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux

c1 - это идентификатор (если имеет , чтобы быть уникальным), 2,3,4,5 - это уровни выполнения, к которым это относится, респаун утверждает, что я сказал ранее, а остальное - команда. Там вы можете просто добавить свою команду, и она должна хорошо работать.

3 голосов
/ 21 мая 2010

Вы можете возродиться с inittab, но у вас мало контроля над тем, когда и как процесс должен быть перезапущен - вы должны отредактировать inittab, чтобы остановить возрождение. Кроме того, респаун inittab не может ничего сделать с заблокированными процессами и процессами, которые становятся дикими, которые потребляют огромные ресурсы ЦП или ОЗУ. Вы также не заметите, что ваш процесс перезапускается каждые две секунды.

Вы можете использовать демон мониторинга процессов, чтобы получить дополнительные возможности и гибкость. Демоны мониторинга позволяют добавлять произвольно сложные варианты поведения к вашему управлению процессом. Конечно, если вы зашли слишком далеко в своих требованиях, вам может понадобиться написать своего собственного демона.

Лучше использовать существующее решение, которое соответствует вашим потребностям.

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

2 голосов
/ 21 мая 2010

Некоторые версии Linux (например, Ubuntu) предпочитают /etc/event.d вместо inittab. Это похожая концепция, но другая реализация.

2 голосов
/ 21 мая 2010

Обработка сигналов отличается между сигналами. Большинство сигналов достигает целевого процесса, где обработчик сигнала может позаботиться об этом, например, SIGTERM - это то, что обычно отправляет kill. Если используется kill -sigkill (или kill -9, они эквивалентны), сигнал никогда не достигает процесса; процесс завершается настолько быстро, насколько это возможно безопасным для ОС способом (если он занят системным вызовом, он будет уничтожен, как только системный вызов завершится, как уничтожение потока, работающего в ядре). режим может привести к сбою ОС, если блокировки не сняты и т. д.).

Таким образом, у процесса нет возможности заблокировать или восстановить SIGKILL независимо от языка программирования.

0 голосов
/ 21 мая 2010

Вы всегда можете вытащить Робин Гуда / Фриар Тук , но в наши дни вы можете убить оба процесса одновременно.

...