fork()を2回呼び出して子プロセスを2つ作成しています。子プロセスAがexec()呼び出しと子プロセスBを実行してexec()呼び出しを実行したい。私が与えられたコードで問題を抱えているのは、子プロセスAからの最初のexec()の後に、次のfork()が発生せず、プログラムが終了するということです。 exec()が親プロセスをオーバーレイする方法と関係していると思います。達成したいのは、fork()によって作成された各子プロセスからexec()を呼び出すことです。fork()とexec()2つの子プロセス
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <unistd.h>
#include <iostream>
int main() {
pid_t cpid_a, cpid_b;
cpid_a = fork();
if(cpid_a < 0) {
std::cout << "Fork failed." << '\n';
return 1;
}
else if(cpid_a == 0) { // code for child process A
execlp("/bin/ls", "ls", NULL);
cpid_b = fork();
if(cpid_b < 0) {
std::cout << "Fork failed." << '\n';
return 1;
}
else if(cpid_b == 0) { // code for child process B
execlp("/bin/ls", "ls", NULL);
}
}
else { // code for parent process
while(wait(NULL) != -1);
}
return 0;
}
'execlp'が返された場合は、失敗したためです。エラーを処理する以外は何もしないexeclの呼び出しの後でコードを決して持つべきではありません。 –
IOWの場合、あなたの子はexeclを呼び出す必要があり、親は 'fork'をもう一度呼び出す必要があります。 –