リナックスでデーモンプロセスを作成する方法は何ですか?

Linuxシステムでは、デーモンプロセスを作成するために以下の手順が可能です。

子プロセスを作成し、その後親プロセスを終了させる。これにより、子プロセスがプロセスグループのリーダープロセスではないことを確実にし、setsid()関数を使用して新しいセッションを作成できる。

pid_t pid = fork();
if (pid < 0) {
    exit(EXIT_FAILURE);
}
if (pid > 0) {
    exit(EXIT_SUCCESS);
}

守護プロセスが作成するファイルに適切な権限が付与されるよう、ファイルパーミッションマスク(umask)を設定してください。

umask(0);

3、作業ディレクトリをルートディレクトリに変更します。これにより、デーモンプロセスがマウントされたファイルシステムを占有しないようにします。

chdir("/");

4、ファイルディスクリプタを閉じることで、デーモンプロセスが親プロセスから継承した不要なファイルディスクリプタが解放されます。

int fd;
for (fd = sysconf(_SC_OPEN_MAX); fd > 0; fd--) {
    close(fd);
}

/dev/nullへの標準入力、標準出力、標準エラー出力のリダイレクトを行うことで、デーモンプロセスに影響を与えないようにしています。

open("/dev/null", O_RDONLY); // 标准输入
open("/dev/null", O_RDWR); // 标准输出
open("/dev/null", O_RDWR); // 标准错误输出

6、デーモンプロセスの中核ロジックを実行する。

// 守护进程核心逻辑

上記のコードを関数に入れて、プログラムのエントリーポイントでその関数を呼び出すことで、簡単なデーモンを作成できます。

bannerAds