I have a long running process and I need it to launch another process (that will run for a good while too). I need to only start it, and then completely forget about it.
The fork
function separates your process in two.
Both processes then receive the result of the function. The child receives a value of zero/nil
(and hence knows that it's the child) and the parent receives the PID of the child.
Hence:
exec("something") if fork.nil?
will make the child process start "something", and the parent process will carry on with where it was.
Note that exec()
replaces the current process with "something", so the child process will never execute any subsequent Ruby code.
The call to Process.detach()
looks like it might be incorrect. I would have expected it to have the child's PID in it, but if I read your code right it's actually detaching the parent process.