teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

提示ソースコードの出力についての記述を追加した。

2020/09/15 05:46

投稿

hidezzz
hidezzz

スコア1248

answer CHANGED
@@ -1,4 +1,7 @@
1
1
  まずはfork()というシステムコールがどういうものであるのかを理解する必要があると思います。
2
2
 
3
3
  fork()を実行すると、プロセス自分自身ををコピーした新しいプロセスが作られた結果、2つの同じプロセスが存在する状態になります。
4
- 2つのプロセスはそれぞれfork()を実行した直後から実行が再開されます。2つのプロセスはコピーであり、ほぼ同じものですが、唯一fork()からの戻り値が違っており、戻り値を見て自プロセスが親プロセスなのか子プロセスなのかを判断しそれぞれの処理に分岐するようになります(またはそうなるようにコーディングしていきます)。
4
+ 2つのプロセスはそれぞれfork()を実行した直後から実行が再開されます。2つのプロセスはコピーであり、ほぼ同じものですが、唯一fork()からの戻り値が違っており、戻り値を見て自プロセスが親プロセスなのか子プロセスなのかを判断しそれぞれの処理に分岐するようになります(またはそうなるようにコーディングしていきます)。
5
+
6
+ 以上を踏まえて、提示されたソースコードのprintf()による出力は1つのプロセスによって行われたものではなく、fork()によって分岐した親プロセスと子プロセスがそれぞれ別々に出力しているものになります。
7
+ 何回か繰り返し実行してるうちに出力順が逆になることも確認出来るかもしれません。