簡體   English   中英

我不明白stdio緩沖如何與子進程交互

[英]I don't understand how stdio buffering interacts with child processes

我認為輸出應該是第一個子進程應該執行第二個孩子然后父進程但是在編譯時給出第一個孩子的第一行然后第二個孩子的第一行然后再次第二個孩子的第二行和第二個孩子的第二行。 這是有問題的代碼:

#include<stdio.h>
int main() {
  int pid,dip;
  pid=fork();
  if(pid==0) {
    printf("1st child's process id is %d \n",getpid());
    printf("first child dead");
  } else {
    dip=fork();
    if(dip==0) {
      printf("2nd child process id is %d\n",getpid());
      printf("Second child dead");
    } else {
      printf("Child with pid %d died \n",wait(0));
      printf("Child with pid %d died \n",wait(0));
      printf("I am the parent");
    }
  }

  return 0;
}

那里的執行順序是不確定的。 有三個進程,父進程和兩個子進程。 所以有3個! =就他們完成的順序而言,有6種可能性。

如果您運行該代碼足夠多次,您將看到所有這六種可能性,盡管可能會有一兩個特別的傾向。

由於有幾個printf() s - 其中一個沒有用換行符刷新 - 在每個進程中,只有6種可能性WRT這些行出現的順序。來自同一進程的兩行總是順序的(即,第一個將出現在第二個之前)但是來自另一個進程的一條線可能出現在它們之間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM