1

这是我的程序:

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 个)打印的“上下文 - 切换”printf行。

4

1 回答 1

2

这可能是因为stdio缓冲。简而言之,多个进程(父进程、子进程、孙子进程等)最终会使用相同的缓冲区,并且它们都会在死亡时将其写入屏幕。尝试:

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

或者也许只是使用write(2)而不是printf.

于 2012-11-25T20:09:15.630 回答