gpt4 book ai didi

c - 关于bash、进程调度和printf()

转载 作者:行者123 更新时间:2023-11-30 15:44:54 25 4
gpt4 key购买 nike

主要代码如下:

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

最佳答案

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

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

您可能会看到完全相同的结果

$ (echo foo; echo bar) &

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

关于c - 关于bash、进程调度和printf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com