親プロセスはハングアップしません。親プロセスはデーモンであり、実行を継続する必要があります。フォークされたプロセスでwait()を実行すると、フォークされたexeclは実行されませんが、アプリケーションをハングアップさせます。C++フォーク、待機なし、defuncts execl
if((pid = fork()) < 0)
perror("Error with Fork()");
else if(pid > 0) {
//wait here will hang the execl in the parent
//dont wait will defunt the execl command
//---- wait(&pid);
return "";
} else {
struct rlimit rl;
int i;
if (rl.rlim_max == RLIM_INFINITY)
rl.rlim_max = 1024;
for (i = 0; (unsigned) i < rl.rlim_max; i++)
close(i);
if(execl("/bin/bash", "/bin/bash", "-c", "whoami", (char*) 0) < 0) perror("execl()");
exit(0);
}
どのように私は待つ(& PID)EXECLのコマンドは文句を言わない亡きなしEXECLをフォークすることができますか?フォーク
signal(SIGCHLD, SIG_IGN);
はまだ受け入れ答えに基づいて、より互換性のあるソリューションで私の限られたスキルを使用する前に、以下を追加することにより、固定
UPDATE 。ありがとう!
最も簡単な解決策はシグナル(SIGCHLD、SIG_IGN)を追加することでした。私のフォークの前に、私は限られたスキルを超えているような他のオプションをほとんど試しました。人々が2.4.xを使いたい場合に備えて、私は引き続き試してみます。 –