#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
void main()
{
int i = 1;
pid_t child_pid;
printf("The main program process ID is %d", (int) getpid());
printf("%d", i);
child_pid = fork();
if (child_pid != 0) {
i++;
printf("%d", i);
printf("This is the parent process, with ID %d \n", (int) getpid());
printf("The child process is %d ", (int) child_pid);
} else {
printf("%d", i);
printf("This is the child process, with ID %d \n", (int) getpid());
}
}
関数を使用して、C言語を使用してこのプログラムを実行していfork()
ます。私が理解しているように、プロセスが を呼び出すfork()
と、子プロセスと呼ばれる複製プロセスが作成されます。親プロセスfork()
は呼び出された時点から実行を継続し、子プロセスも同じプログラムを同じ場所から実行します。
したがって、プログラムを実行すると、出力は次のテキストのようになると思います。
The main program process ID is 181411This is the child process, with ID 1815
The main program process ID is 18142This is the parent process,with ID 1814
The child process is 1815
しかし、実際には次の出力が表示されます。
The main program process ID is 181411This is the child process, with ID 1815
The main program process ID is 181412This is the parent process,with ID 1814
The child process is 1815
これは、子供が最初にプログラムを実行することを意味します!!! \n
各ステートメントの最後に置くとprintf
、出力は正しいです!!!
Fedora v12 および rhel 5 ディストリビューションで試しました。\n
と操作の間に論理的な関係はありfork()
ますか? どうすればこの問題を解決できますか?