TL; DR: detach the (daemon) process (via setsid)
-
In parent process: fork
-
In parent process: exit
-
In child process: setsid maybe...
3.1. In child process: fork again => child process B
3.2. In child process: exit
3.3. In child process B: setsid -
In child process (maybe B): set umask
-
In child process (maybe B): set I/O redirection
-
In child process (maybe B): close other fds
-
In child process (maybe B): change workdir to /
-
In child process (maybe B): fork/exec the process to run
(Warning: Just worked in Linux)
# Usage
./daemonize.sh [command]
ps -ef | grep daemonize.sh
# PPID => 1 (init)