为什么以下声明打印三次?

时间:2012-11-25 20:07:30

标签: c multithreading fork

这是我的计划:

int main(int argc, char * argv[])
{
    pid_t child;
    int i=0;

    if( argc < 4 ){
        printf("Usage: %s <num_threads> <test_interval> <no_of_prints>\n", argv[0]);
        exit(1);
    }  

    // Some program logic goes here

    printf("context - switch \n\nPid\ttid\tNPid\tNtid\tJiffies\n\n");

    syscall(320);       

    child = fork();

    if(child == 0 ) { //in child
        fork();
        fork();
        process();
    }
    else    {
            wait(child);
            //Do some printing here 
    }

我的输出有3张(有时是2张)“context - switch”printf行的打印件。

1 个答案:

答案 0 :(得分:2)

这可能是因为stdio缓冲。简而言之,多个进程(父进程,子进程,子进程等)以相同的缓冲区结束,并且当它们死亡时它们都将其写入屏幕。尝试:

printf("context - switch \n\nPid\ttid\tNPid\tNtid\tJiffies\n\n");
fflush(stdout);

或者只是使用write(2)代替printf