現在のプロセスと並行して別のコマンドラインプロセスを実行しようとしています。しかし、私は、コマンドラインプログラムが時々異常に終了し、それが私のメインプログラムも殺すことを認識しています。親子が異常終了した場合、フォークされたプロセスが生き続ける(C++)
// MAIN PROGRAM
pid = fork();
char *argv[] = { stuff.. };
if (pid == 0) {
int rc = execv("command line program...", argv);
}
// DO OTHER STUFF HERE.
if (pid > 0) {
waitpid(pid, 0, 0);
}
コマンドラインプログラムが異常死んだ後、私のメインプログラムの実行を維持する方法はありますか?ありがとう!
[UPDATE]:はい、メインプロセスはコマンドラインの読み込み元のファイルに書き込みますが、パイプではなく通常のファイルです。私はsegfaultを受け取ります。
子プロセスが非常に頻繁にクラッシュすることはないので、バグを再現することは非常に難しいです。しかしそれは起こる。無作為にクラッシュするのは、コマンドラインプログラムの既知のバグです。そのため、コマンドラインが消滅しても私のメインプログラムを生かしておきたいのです。あなたの本当のコードで
あなたが投稿した内容に基づいて、あなたのメインプログラムがなぜ死ぬのかわかりません。これは実際に起こっているのか、起こっていることについて心配しているのでしょうか? – Duck
親と子が何らかの形で相互作用している場合を除き、子プロセスの死が親プロセスに影響を及ぼす可能性は低いです。親はパイプを介して子供との間で読み書きをしていますか?あなたはおそらくSIGPIPEシグナルを得ていますか?または他の信号? –
@Duck、しかしそれは実際に起こる...だから、これは正しい方法だと思いますか? – CodeNoob