Jas*_*ith 53
根据Stevens 在UNIX环境中的高级编程第13章,这是制作性能良好的Unix守护进程的过程:
setsid来创建一个新会话.这有三件事:
/以避免干扰安装和卸载stdout,stderr,和stdin.现在有一个文件来跟踪由Linux分发启动脚本大量使用的PID.务必写出孙子的PID,或者第二个叉子的返回值(步骤3)或者getpid()步骤3之后的值.
这是一个Ruby实现,主要是从本书翻译而来,但是使用双叉并写出守护进程PID.
# Example double-forking Unix daemon initializer.
raise 'Must run as root' if Process.euid != 0
raise 'First fork failed' if (pid = fork) == -1
exit unless pid.nil?
Process.setsid
raise 'Second fork failed' if (pid = fork) == -1
exit unless pid.nil?
puts "Daemon pid: #{Process.pid}" # Or save it somewhere, etc.
Dir.chdir '/'
File.umask 0000
STDIN.reopen '/dev/null'
STDOUT.reopen '/dev/null', 'a'
STDERR.reopen STDOUT
小智 6
继Jason的精彩回应之后,我在这里写了一个更全面的实现:
https://gist.github.com/1372491/b76b60fb1842bf0507f47869ab19ad50a045b214
除了双叉和写入pid文件之外,我还实现了日志记录.
另一个有趣的实现是Unicorn:
https://github.com/defunkt/unicorn/blob/master/lib/unicorn/launcher.rb
| 归档时间: | 
 | 
| 查看次数: | 7946 次 | 
| 最近记录: |