Joel VanderWerf
7/10/2008 4:17:00 PM
M. Edward (Ed) Borasky wrote:
> Tim Conner wrote:
>> I have a Ruby script that uses Event machine to listen on a port for
>> incoming data. When data is received, the script saves it to the
>> database.
>> How can I kill this script gracefully? I want to make sure that the
>> data is not being processed or saved the to DB when I kill it.
>>
>> script looks something like:
>>
>> #!/usr/bin/env ruby
>> require 'rubygems'
>> require 'eventmachine'
>>
>> module TestServer
>> def receive_data data
>> #Process and save data
>> end
>>
>> end
>>
>> EventMachine::run {
>> $a = EventMachine::open_datagram_socket "", 1720,
>> TestServer
>>
>> }
>
> I don't know about Windows, but on Linux, and most Unix-ish systems,
> when you "kill" a process, what you are actually doing is sending a
> signal to it, which the process can handle, catch or ignore. Processes
> usually have a default behavior for some signals built in. So check out
> "Signal handling" in the Pickaxe for the details. And if you have a
> Linux system, do "man kill" and "kill -l" for the low-level details.
>
> One note: signal number 9 can not be caught or ignored on a Unix-ish
> box. So even if you write your own signal handler, anybody with the
> right privileges can send signal 9 to it and force an immediate and
> possibly data-corrupting end to your script.
Sounds like he was asking: which signals does EM handle and how...?
I would guess TERM would be handled with a graceful exit, just because
that's fairly standard, but ask someone who knows EM better than I do.
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407