デーモンプロセスを作成するには
978 ワード
デーモンプロセスプログラミング手順
1.子プロセスの作成、親プロセスの終了 すべての作業はサブプロセスで行われる形で制御端末から離脱した2.サブプロセスで新しいセッションsetsid()関数を作成してサブプロセスを完全に独立させ、離脱制御3.現在のディレクトリをルートディレクトリchdir()関数に変更してアンロード可能なファイルシステムを占有することを防止する他のパスに変更する4.ファイル権限マスクumask()をリセットする関数は継承されたファイルの作成を防止し、一部の権限を拒否してデーモンプロセスの柔軟性を高める5.ファイル記述子を閉じて継承されたオープンファイルは使用されず、システムリソースを浪費し、アンインストールできない6.デーモンプロセスのコア作業を開始する
7.デーモンプロセス終了処理
コード実装
1.子プロセスの作成、親プロセスの終了 すべての作業はサブプロセスで行われる形で制御端末から離脱した2.サブプロセスで新しいセッションsetsid()関数を作成してサブプロセスを完全に独立させ、離脱制御3.現在のディレクトリをルートディレクトリchdir()関数に変更してアンロード可能なファイルシステムを占有することを防止する他のパスに変更する4.ファイル権限マスクumask()をリセットする関数は継承されたファイルの作成を防止し、一部の権限を拒否してデーモンプロセスの柔軟性を高める5.ファイル記述子を閉じて継承されたオープンファイルは使用されず、システムリソースを浪費し、アンインストールできない6.デーモンプロセスのコア作業を開始する
7.デーモンプロセス終了処理
コード実装
#include
#include
#include
void daemonize(void)
{
pid_t pid;
/*
* ,
*/
if ((pid = fork()) < 0) {
perror("fork");
exit(1);
} else if (pid != 0) /* parent */
exit(0);
setsid();
/*
* / .
*/
if (chdir("/") < 0) {
perror("chdir");
exit(1);
}
/* umask 0 */
umask(0);
/*
* 0,1,2 /dev/null, , 0,1,2 .
*/
close(0);
open("/dev/null", O_RDWR);
dup2(0, 1);
dup2(0, 2);
}
int main(void)
{
daemonize();
while(1); /* */
}