私の C++ プログラムは、fork() と execv() を使用していくつかの子プロセスを生成します。これらのプロセスを照会するにはどうすればよいですか? シャットダウンしたい場合は、どうすればよいですか?
3 に答える
の場合fork、戻り値は子プロセスでは 0、親プロセスでは子のプロセス ID (pid) です。
その後、その pid で呼び出しkillて、まだ実行中かどうかを確認したり、シャットダウンを要求したりできます。プロセスが実行されているかどうかを確認するには、シグナルとして 0 を使用し、戻り値を確認します (0 == 実行中、-1 == 実行されていません)。シャットダウンを要求するにSIGTERMは、シグナルとして使用します。
fork()おそらく、ソケットを介した後のプロセス間で通信するための私が知っている最良の方法です( socketpair()を参照)。
そこから、通信用のプロトコル (終了要求を含む) を定義するだけで、おそらく何でも機能させることができます。
を呼び出した後、またはをfork()使用して子の戻りステータスを検出できます。子の待機をブロックしたくない場合は後者を使用します。渡された引数は、終了後の子プロセスの戻りステータスを保持するへのポインタになります。フォークされたプロセスが完了するのを待ち、戻り値を気にしない場合は、単純に を呼び出すか、非ブロッキング バージョンを呼び出すことができます。wait(&status_int)waitpid(child_pid, &status_int, WNOHANG)&status_intintwait(NULL)waitpid(-1, NULL, WNOHANG)