LinuxでCを使ってデーモンを書こうとしたとき、次のコードを追加する必要があると言われました。フォークコードブロック:
/* Preparations */
...
/* Fork a new process */
pid_t cpid = fork();
if (cpid == -1){perror("fork");exit(1);}
if (cpid > 0){exit(0);}
/* WHY detach from tty ? */
int fd = open("/dev/tty", O_RDWR);
ioctl(fd, TIOCNOTTY, NULL);
/* Why set PGID as current PID ? */
setpgid(getpid(), 0);
私の質問は、上記の操作を実行する必要があるかどうかです。
ベストアンサー1
ターミナルの操作に関連するシグナル (ターミナル セッションが終了したときの SIGHUP や、場合によっては SIGTTIN および SIGTTOU など) が送信されないようにするには、デーモン プロセスとターミナルの関連付けを解除する必要があります。
ただし、TIOCNOTTYを使用して端末から切断する方法は、ioctl
ほとんど廃止されています。setsid()
その代わり。
デーモンが元のプロセス グループを離れる理由は、そのグループに送信されたシグナルを受信しないためです。 は、setsid()
プロセスを独自のプロセス グループに配置することにも注意してください。