Thanks Jeremy. I also reported this on Thin's bug tracking system as well.
Jeremy Evans wrote:
On Wed, Feb 23, 2011 at 4:32 PM, Clint Pachl<[email protected]> wrote:I use Thin (ruby-thin) as the HTTP frontend for my web frameworks. STARTING/STOPPING: $ sudo -u #{USER} thin -C #{THIN_PRODUCTION_CONF} start $ sudo -u #{USER} thin -C #{THIN_PRODUCTION_CONF} stop THIN_PRODUCTION_CONF: --- rackup: config/config.ru address: localhost port: 3020 servers: 4 max_conns: 1024 max_persistent_conns: 512 timeout: 30 environment: production pid: tmp/thin-production.pid log: log/thin-production.log daemonize: true When sending the thin "stop" command, I get the following error on STDOUT: Stopping server on localhost:3020 ... Sending QUIT signal to process 15182 ... /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/daemonizing.rb:7:in `getpgid': Operation not permitted (Errno::EPERM) from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/daemonizing.rb:7:in `running?' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/daemonizing.rb:118:in `send_signal' from /usr/local/lib/ruby/1.8/timeout.rb:67:in `timeout' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/daemonizing.rb:117:in `send_signal' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/daemonizing.rb:103:in `kill' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:87:in `stop' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:128:in `tail_log' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/controllers/controller.rb:86:in `stop' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `send' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/runner.rb:177:in `run_command' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/lib/thin/runner.rb:143:in `run!' from /usr/local/lib/ruby/gems/1.8/gems/thin-1.2.7/bin/thin:6 from /usr/local/bin/thin:19:in `load' from /usr/local/bin/thin:19 Here's a snipped from daemonizing.rb: 6: def running?(pid) 7: Process.getpgid(pid) != -1 8: rescue Errno::ESRCH 9: false 10: end As you can see, the ESRCH error is rescued here, which is the other error that getpgid(2) can return. Can anyone explain this?Yes. The original author is not checking all of the errors he should be checking. He should be rescuing Errno::EPERM and returning true, I think. Looks like a patch for exactly that was committed in June of last year: https://github.com/macournoyer/thin/blob/master/lib/thin/daemonizing.rb#L8 So thin should probably be updated after ports unlocks. I'll take care of it. Jeremy

