やりかた
-
fork
親プロセスは終了 -
setsid で端末を切り離す
-
カレントディレクトリを / にする。
-
stdin, stdout, stderrをクローズ
簡易版
void daemonize(){
switch (fork()) {
case -1:
return (-1);
case 0:
break;
default:
exit(EXIT_SUCCESS);
}
if (setsid() == -1)
return (-1);
if (nochdir == 0) {
if(chdir("/") != 0) {
return (-1);
}
}
// reset mask
umask(0);
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
}