【问题标题】:About bash, process scheduling and printf()关于 bash、进程调度和 printf()
【发布时间】:2013-10-10 02:43:14
【问题描述】:

主要代码如下:

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$”前面输出在一个

【问题讨论】:

  • 如果你问的是顺序,可能并不总是这样,子进程可能先退出,父进程也可能先退出。

标签: c bash process


【解决方案1】:

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

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

您可能会看到与

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2010-12-03
    • 2014-03-21
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多