C 关于bash、进程调度和printf()
主要代码如下:C 关于bash、进程调度和printf(),c,bash,process,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 结果如下: int main(){ pid_t pid=fork()
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
结果如下:
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在后台启动进程-在不等待上一个命令完成的情况下请求下一个命令)如果您询问的是序列,它可能并不总是正确的,子进程可能会先退出,父进程也可能先退出。