关于bash,进程调度和printf()

时间:2013-10-10 02:43:14

标签: c bash process

主要代码如下:

int main(){
    pid_t pid=fork();
    if(pid==0){
        printf("a\n");
        exit(0);
    }
    else
        printf("b\n");
    return 0;
}

输出如下:

b
aimager@cong-Ubuntu:/mnt/LinuxDatum/WorkSpace/Ubuntu$ a

问题是:为什么“aimager @ cong-Ubuntu:/ mnt / LinuxDatum / WorkSpace / Ubuntu $”前端输出

1 个答案:

答案 0 :(得分:1)

你已经在前台执行了进程,所以shell在请求下一个命令之前等待它的返回。此过程启动另一个子进程,对于shell,它是后台。当初始进程完成时,shell,不知道它从未启动的任何子进程的任何内容,请求您使用命令提示符(在您的情况下 - 它的用户名@ hostname:/ current / working / directory $)的下一个命令,但在此后台进程决定打印一些数据。提示已经存在,没有人会删除它,因此这些数据只是附在此处。

它只影响你看待事物的方式。 Shell没有得到这些数据所以它没有添加到命令字符串中,它只是以这种方式显示。如果您希望看到清晰的线条,可以按返回强制重新提示。

您可能会看到与

完全相同的结果
$ (echo foo; echo bar) &

&是命令shell在后台启动进程 - 请求下一个命令而不等待上一个命令完成)