mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Process.kill to check for process is more portable.
On OpenBSD, you can only use getpgid(pid) if the calling process belongs to the same session as the the process with the PID `pid'. Otherwise getpgid() returns EPERM. Using kill(0, pid) is a more portable way to check whether a process exists.
This commit is contained in:
parent
dd600a3a2e
commit
a6ea55d16f
1 changed files with 8 additions and 2 deletions
|
@ -41,9 +41,13 @@ class Sidekiqctl
|
|||
end
|
||||
|
||||
def fetch_process
|
||||
Process.getpgid(pid)
|
||||
Process.kill(0, pid)
|
||||
rescue Errno::ESRCH
|
||||
done "Process doesn't exist", :error
|
||||
# We were not allowed to send a signal, but the process must have existed
|
||||
# when Process.kill() was called.
|
||||
rescue Errno::EPERM
|
||||
return pid
|
||||
end
|
||||
|
||||
def done(msg, error = nil)
|
||||
|
@ -67,10 +71,12 @@ class Sidekiqctl
|
|||
`kill -TERM #{pid}`
|
||||
kill_timeout.times do
|
||||
begin
|
||||
Process.getpgid(pid)
|
||||
Process.kill(0, pid)
|
||||
rescue Errno::ESRCH
|
||||
FileUtils.rm_f pidfile
|
||||
done 'Sidekiq shut down gracefully.'
|
||||
rescue Errno::EPERM
|
||||
done 'Not permitted to shut down Sidekiq.'
|
||||
end
|
||||
sleep 1
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue