Linuxデーモンを書くときにttyから切り離す必要があるのはなぜですか? 質問する

Linuxデーモンを書くときにttyから切り離す必要があるのはなぜですか? 質問する

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()プロセスを独自のプロセス グループに配置することにも注意してください。

おすすめ記事