Разрешить приложению перехватывать сигналы POSIX.Взгляните на Класс сигналов .
. Если вы отправите kill <signal type>
процессу, будут вызваны любые обработчики сигналов, независимо от того, что процесс в данный момент делает.Например, вы можете установить какой-либо флаг, который проверяется в разумной точке вашей логики (например, в конце цикла выполнения), завершая процесс, если этот флаг установлен.Есть много сигналов , на которые вы можете ответить, но SIGHUP
или один из SIGUSR
сигналов, вероятно, имеют смысл для того, что вы делаете ... вы можете реагировать на любой сигнал, который вам нравится, любым способомВы хотите, но имеет смысл разрешить поведение по умолчанию для большинства обычно обрабатываемых (например, SIGTERM
и SIGKILL
).Для действительно сложных вещей вы можете принять закодированную серию сигналов для запуска определенных событий.
Signal.trap("HUP") do
puts "Huh?"
end
loop do
puts "Looping..."
sleep 2
end
Выход
[chris@chipbook:~%] ruby sig_demo.rb
Looping...
Looping...
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...
Huh?
Looping...
Looping...
Looping...
Потому что в другом окне терминала я сделал:
[chris@chipbook:/usr/local%] ps aux | grep ruby
chris 69487 0.0 0.0 2425480 188 s005 R+ 11:26pm 0:00.00 grep ruby
chris 69462 0.0 0.1 2440224 4060 s004 S+ 11:26pm 0:00.03 ruby sig_demo.rb
[chris@chipbook:/usr/local%] kill -HUP 69462
[chris@chipbook:/usr/local%] kill -HUP 69462