私は親プロセスを持っており、子プロセスをほとんど作成していません。私が見つけた最も良い方法はfork
+ execl
です。しかし親プロセスは、具体的な子のexecl
が失敗するかどうかを知る必要があり、それを実装する方法はわかりません。linuxで子プロセスを作成し、失敗する可能性がある場合の最良の方法
int pid = fork();
if (pid < 0) {
std::cout << "ERROR on fork." << std::endl;
} if (pid == 0) {
execl("/my/program/full/path", (char *)NULL);
exit(1);
}
else {
if (/*child's process execl fails*/) {
std::cout << "it failed" << std::endl
} else {
std::cout << "child born" << std::endl
}
}
私はこのアイデアが良くないと思う:
int status(0);
sleep(100);
int res = waitpid(pid, &status, WNOHANG);
if (res < 0 && errno == 10) {
std::cout << "it failed" << std::endl
} else {
std::cout << "child born" << std::endl
}
それは子プロセスが100ミリ秒後に死ぬことを願っていて良いではありませんので、私はその意志が起こるように確かにそれを知りたいです。
また、このようなチェックのためのshared_memoryまたは特別なパイプ接続の作成は、Beesに対するCannonです。
私はまだ見つからなかったという単純な解決策が必要です。
これを達成する最も良い方法は何ですか?
'popen'を使用して戻り値を確認してください。 – Andrew
それはまだ生きていると言えば、execlが失敗していないことをどのように確認できますか?たぶんそれは失敗し、 'exit(1)'命令をまだ完了していないという理由だけでプロセスは生きています。 – Arkady
あなたのプロセスが正常に起動したことを確認したいのですか*完了し*してステータスがゼロ*を返していますか? 2つは全く異なっています。 – Andrew