Ответ
Сигналы в 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, и нет проблем. Главное — не начинать сразу с девятки, а то он там данные не успеет сохранить, и ты потом охуеешь. Всё как в жизни: сначала поговори, а потом уже бей.