0

ソケット経由の接続を待機する無限ループを実行する C プログラムの作成に成功しました。デーモンにして起動・停止できるようにしたいです。どうすればいいですか?バックグラウンドで実行するには、コードにどのような変更を加える必要がありますか?

4

2 に答える 2

2

デーモンになるために必要な従来のタスクは次のとおりです。

  1. デーモンが別のマウントを固定しないように、作業ディレクトリをルートに変更します。
  2. fork()プロセスがプロセス グループ リーダーにならないように、呼び出して親を終了させます。
  3. 標準入力、標準出力、および標準エラーを にリダイレクトし/dev/nullます。
  4. 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 に答える