在Ruby中创建行为良好的Unix或Linux守护程序的正确方法是什么?
无论如何,行为良好的守护程序的定义是什么,如何用Ruby编写这样的程序?
根据 UNIX环境 第13章的Stevens 高级编程 ,这是制作行为良好的Unix守护程序的过程:
setsid
/
stdout
stderr
stdin
如今,有一个文件可以跟踪PID,Linux发行引导脚本经常使用该文件。确保写出孙子的PID,第二个fork的返回值(步骤3)或getpid()步骤3之后的值。
getpid()
这是一个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