私はいくつかの最終結果を得るために複数のI/Oパイプ(プロセスごとに1つのパイプ)を使用するmapreduceプログラムを作成しています。プロセスの作成に問題があります。具体的には、私は次のエラーを取得しています:fork() - 複数のプロセスとシステムコール
wait error: Interrupted system call
これは、プロセスを生成私のコードです:
while (values[inc]!=NULL) //provided array of text lines
{
if ((pid = fork()) == -1) {
perror("fork error");
exit(EXIT_FAILURE);
}
else if (pid == 0) { /* start of child process */
printf("Child process...\n");
/* pipes[inc][1] is a file descriptor to which myMap writes some data
using the write() system call
mr is a struct that holds other function pointers */
mr->myMap(pipes[inc][1],values[inc]);
exit(0);
}
else { /* start of parent process */
printf("Parent process...\n");
if ((wpid = wait(&status)) == -1)
/* Wait for child process. */
perror("wait error");
else { /* Check status. */
if (WIFSIGNALED(status) != 0)
printf("Child process ended because of signal %d\n",
WTERMSIG(status));
else if (WIFEXITED(status) != 0)
printf("Child process ended normally; status = %d\n",
WEXITSTATUS(status));
else
printf("Child process did not end normally\n");
}
//close(fd[1]);
printf("Parent process ended\n");
}
inc++;
}
この後、私は一つのスレッド
pthread_t newThread;
pthread_create(&newThread,NULL,threadFunction,values);
pthread_join(newThread,NULL);
を作成していthreadFunctionは(選択し使用しています)関数を使用して、どのファイル記述子が読み込み準備ができているかを調べ、それを読み込んで辞書に格納します。
フォームgdbデバッガ、プログラムの出力を実行する場合:
Parent process...
Child process...
wait error: Interrupted system call
Parent process ended
Parent process...
Child process ended normally; status = 0
Parent process ended
Parent process...
Child process...
Child process...
wait error: Interrupted system call
Parent process ended
私は問題を解決する方法がわかりません。助言がありますか?
ありがとうございます!
私はあなたが何を意味するかわかりません。詳しく教えてください。 – Krzysiek
@Rafcio私は自分の答えを更新しました。 – trojanfoe
ありがとうございます。それは理にかなっている! :) – Krzysiek