Cのバックグラウンドでプロセスをexec()するにはどうすればよいですか?
質問
プロセスでforkとexec()を実行しましたが、バックグラウンドで実行したいです。これどうやってするの? waitpidを呼び出すのを避けることができますが、プロセスは永遠にそこに座って、親にステータスを返すのを待っています。これを行う他の方法はありますか?
解決
SIGCHLDをキャッチし、ハンドラーでwait()を呼び出します。
Posixのいくつかのフレーバー(* BSDと思いますが、そのことを引用しないでください)、SIGCHLDを無視すると、カーネルは自動的にゾンビプロセスをクリーンアップします(psで表示されるものです)。便利な機能ですが、移植性はありません。
他のヒント
あなたがやろうとしているのは、デーモンプロセスの作成だと思います。説明については、Wikipediaのこちらリンクを読んでください。
プロセスをデーモンにするための例(Unix環境でのスティーブンの高度なプログラミングによる)は次のとおりです。
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
int daemon_int(void)
{
pid_t pid;
if ((pid = fork()) < 0)
return (-1) ;
else if (pid != 0)
exit(0) ; /* The parent process exits */
setsid() ; /* become session leader */
chdir("/") ; /* change the working dir */
umask(0) ; /* clear out the file mode creation mask */
return(0) ;
}
もちろん、これはOSのようなUnixを想定しています。
プログラムには上記の関数が含まれており、実行されるとすぐに呼び出されます。その後、親プロセスから切り離され、終了するか強制終了されるまで実行を続けます。
waitpid(-1、&amp; status、WNOHANG)
は必要なことを行う場合があります。子プロセスが終了していない場合は、すぐに戻る必要があります。または、SIGCHLDシグナルをリッスンすることもできます。
フォークしてバックグラウンドスレッドを作成し、実行します。このサイトでのduの質問を参照してください: &amp;を与えるexec()を使用してバックグラウンドプロセスを開始できますか?引数として?