私はいくつかのCを学び始めていますし、フォークを勉強している間、私は予期しない結果を得ました。少なくとも私にとっては。Fork()を使用して子プロセスを2つだけ作成する方法
親から2つの子プロセスだけを作成する方法はありますか?
ここに私のコード:
#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
/* Create the pipe */
int fd [2];
pipe(fd);
pid_t pid;
pid_t pidb;
pid = fork();
pidb = fork();
if (pid < 0)
{
printf ("Fork Failed\n");
return -1;
}
else if (pid == 0)
{
//printf("I'm the child\n");
}
else
{
//printf("I'm the parent\n");
}
printf("I'm pid %d\n",getpid());
return 0;
}
そして、ここでは私の出力である:
I'm pid 6763
I'm pid 6765
I'm pid 6764
I'm pid 6766
してください、パイプ部分を無視し、私はまだそこまでもらっていません。私はちょうど2つの子プロセスを作成しようとしているので、3つの "I'm pid ..."は、パイプで通信する2つの子プロセスと待機する親に対して1を出力します。
エラーがどこにあるかわかりますか?
'フォーク(2)'の両方の非常にシンプルとUNIX APIで最も誤解コールの一つです。 「関連する」サイドバーを見てください。親と子の間ではなく、2人の子供の間でコミュニケーションが必要な特別な理由はありますか? – dmckee
fork()コールではなぜpid == 0をチェックしていますか?どちらが親であり、どちらが子供であるかをどのように知ることができますか? – TwilightSparkleTheGeek
@TwilightSparkleTheGeek 'man fork'の状態: 戻り値 成功すると、子プロセスのPIDが親に返され、子に 0が返されます。失敗した場合、親に-1が返され、 子プロセスが作成されず、errnoが適切に設定されます。 – mimoralea