Какие основные сигналы используются для управления процессами в Linux?

Ответ

Сигналы в Linux — это основной механизм для межпроцессного взаимодействия (IPC) и управления процессами. Каждый сигнал имеет свой номер и символьное имя. Вот ключевые из них:

  • SIGHUP (1) (Hang Up): Изначально использовался для оповещения о разрыве связи с терминалом. Сейчас часто используется для перезагрузки конфигурации демонов без их остановки.

  • SIGINT (2) (Interrupt): Сигнал прерывания, обычно отправляется нажатием Ctrl+C. Процесс может его перехватить и корректно завершить работу.

  • SIGKILL (9) (Kill): Безусловное, немедленное завершение процесса. Этот сигнал нельзя перехватить или проигнорировать, поэтому он является "последним средством".

  • SIGTERM (15) (Terminate): Стандартный сигнал для запроса завершения процесса. В отличие от SIGKILL, он может быть перехвачен программой для выполнения очистки (сохранение данных, закрытие файлов). Это "вежливый" способ остановить процесс.

  • SIGSTOP (19) (Stop): Приостанавливает выполнение процесса. Его, как и SIGKILL, нельзя перехватить.

  • SIGCONT (18) (Continue): Возобновляет работу процесса, ранее остановленного сигналом SIGSTOP.

Пример использования команды kill:

# Найти PID процесса (например, my_app)
pid=$(pgrep my_app)

# Отправить сигнал на корректное завершение (по умолчанию SIGTERM)
kill $pid

# Если процесс не отвечает, отправить сигнал на безусловное завершение
kill -9 $pid
# или
kill -SIGKILL $pid

Ответ 18+ 🔞

Да ты посмотри, какие они, эти сигналы, придумали! Ну, блядь, как будто в армии: команды, команды, и нихуя не спросишь. Процесс сидит себе, работает, а ему — раз! — сигнал в ебло. И всё, приехали.

Вот, например, SIGHUP (1) — это типа «ало, трубку бросили». Раньше, когда модемы пищали, это значило, что связь порвалась. А сейчас какой-нибудь демон его получит и думает: «Ага, щас конфиги перечитаю, нехуй тут». Вежливо так, без паники.

А SIGINT (2) — это классика, наше всё. Ты в консоли сидишь, что-то долго выполняется, ты уже заебался ждать — жмёшь Ctrl+C. И процессу: «Бро, всё, давай закругляйся». Умный процесс скажет: «Ща, секунду, файлы сохраню» — и выйдет. А тупой — просто сдохнет, блядь, и всё.

Но это всё цветочки. Вот SIGKILL (9) — это, сука, приезд ОМОНа. Никаких «подожди, я сейчас». Никаких перехватов. Просто — хоба! — и процесса нет. Вообще. Нахуй. Это когда уже всё, терпения ебать ноль, и никакие уговоры не помогают. Сила, блядь, чистая сила.

А SIGTERM (15) — это как вежливый стук в дверь: «Извините, можете, пожалуйста, завершиться? У нас тут плановые работы». Нормальный процесс услышит, приберётся на рабочем столе и выйдет. Но если он — упрямая жопа, то проигнорирует. Тогда уже девятку в ход пускают.

Ну и пара стоп-сигналов, чтоб два раза не вставать. SIGSTOP (19) — это как мордой в стол: «Сиди, блядь, и не шевелись». Не спросил, можно ли — просто остановил. А SIGCONT (18) — это: «Ладно, иди уже, работай дальше». И процесс, такой весь помятый, продолжает.

Вот смотри, как этим на практике пользоваться:

# Найти PID процесса (например, my_app)
pid=$(pgrep my_app)

# Отправить сигнал на корректное завершение (по умолчанию SIGTERM)
kill $pid

# Если процесс не отвечает, отправить сигнал на безусловное завершение
kill -9 $pid
# или
kill -SIGKILL $pid

Смотри, логика простая: сначала попросили по-хорошему (kill $pid). Не помогло? Ну, извини, дружок, тогда — kill -9, и нет проблем. Главное — не начинать сразу с девятки, а то он там данные не успеет сохранить, и ты потом охуеешь. Всё как в жизни: сначала поговори, а потом уже бей.