作为代码,为什么我没有得到任何输出,有人可以告诉我这个问题吗?就像我有两个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;
}
答案 0 :(得分:2)
stdout是缓冲的,它通常只会在换行符上刷新,或者如果你明确刷新它。
您可以通过在语句中添加换行符来获取代码以输出子流程中的行:
fprintf(stdout, "fork1\n");
或者通过在fprintf:
之后显式刷新缓冲区fflush(stdout);