ソケット経由の接続を待機する無限ループを実行する C プログラムの作成に成功しました。デーモンにして起動・停止できるようにしたいです。どうすればいいですか?バックグラウンドで実行するには、コードにどのような変更を加える必要がありますか?
2244 次
2 に答える
2
デーモンになるために必要な従来のタスクは次のとおりです。
- デーモンが別のマウントを固定しないように、作業ディレクトリをルートに変更します。
fork()
プロセスがプロセス グループ リーダーにならないように、呼び出して親を終了させます。- 標準入力、標準出力、および標準エラーを にリダイレクトし
/dev/null
ます。 setsid()
プロセスを、制御端末のない新しいセッションのセッション グループ リーダーにするために呼び出します。
エラーチェックなし:
chdir("/);
if (fork() > 0)
_exit();
close(0);
close(1);
close(2);
open("/dev/null", O_RDWR);
dup(0);
dup(0);
setsid();
Linux では、glibc はdaemon()
これらのタスクを実行するためのヘルパー関数を提供します。
于 2013-06-13T04:34:09.457 に答える
1
ac プログラムをデーモンとして実行するには、次の手順を実行する必要があります。
// Create child process
process_id = fork();
//unmask the file mode
umask(0);
//change the directory as your home directory
strcpy(home,"HOME");
home=getenv(home);
chdir(home) ;
//set new session
sid = setsid();
close(STDIN_FILENO); open("/dev/null", O_RDWR);
close(STDOUT_FILENO); open("/dev/null", O_RDWR);
close(STDERR_FILENO); open("/dev/null", O_RDWR);
于 2013-07-05T06:51:35.237 に答える