2015-11-26 3 views
0

Как код, почему я не получаю никаких результатов, может ли кто-нибудь сказать мне эту проблему? например, у меня есть два fork(), и каждый из них будет запущен в дочернем процессе, и мой родительский процесс не будет завершен, кажется правильным, но все равно ничего не получит.Почему мой fork() ничего не выводит?

#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char **argv) 
{ 
    /***********************************/ 
    printf("--beginning of program\n"); 

    int counter = 0; 
    pid_t pid1 = 0; 
    pid_t pid2 = 0; 
    while(1){ 
     if(pid1 == 0) 
      pid1 = fork1(); 
     if(pid2 == 0) 
      pid2 = fork2(); 
    } 

    printf("--end of program--\n"); 
    return 0; 
} 

/* Two fork() */ 
pid_t fork1(){ 
    pid_t pid = fork(); 
    if(pid ==0) 
    { 
     while(1){ 
      sleep(1); 
      fprintf(stdout," fork1 "); 
     } 
    } 
    return pid; 
} 

pid_t fork2(){ 
    pid_t pid = fork(); 
    if(pid ==0) 
    { 
     while(1){ 
      sleep(1); 
      fprintf(stdout," fork1 "); 
     } 
    } 
    return pid; 
} 

ответ

2

stdout буферизуется, он обычно будет только краснеть на новой строке или если вы явно промойте его.

Вы можете получить код для вывода строки из детских процессов путем добавления новой строки в операторах:

fprintf(stdout, "fork1\n"); 

или путем явного очистки буфера после fprintf:

fflush(stdout); 
Смежные вопросы