主要代码如下:
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 $”前端输出
答案 0 :(得分:1)
你已经在前台执行了进程,所以shell在请求下一个命令之前等待它的返回。此过程启动另一个子进程,对于shell,它是后台。当初始进程完成时,shell,不知道它从未启动的任何子进程的任何内容,请求您使用命令提示符(在您的情况下 - 它的用户名@ hostname:/ current / working / directory $)的下一个命令,但在此后台进程决定打印一些数据。提示已经存在,没有人会删除它,因此这些数据只是附在此处。
它只影响你看待事物的方式。 Shell没有得到这些数据所以它没有添加到命令字符串中,它只是以这种方式显示。如果您希望看到清晰的线条,可以按返回强制重新提示。
您可能会看到与
完全相同的结果$ (echo foo; echo bar) &
(&
是命令shell在后台启动进程 - 请求下一个命令而不等待上一个命令完成)