我一直认为子进程总是在父进程完成后执行,但是在运行以下程序后,我得到的结果是有时只打印父进程、子进程或备用进程,我认为是调度程序正在更改进程,但在任务中即使两者都处于 S 状态,管理器仍然会打印,因此当子进程和父进程执行时谢谢!
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main (){
int pid=fork();
while (1){
if(pid==0){
puts("child");
}else{
puts("parent");
}
}
}
答案1
经过 a 后fork()
,父进程和子进程理论上同时开始运行。当然,在实践中,如果您使用的是单处理器系统,或者有其他进程想要运行,或者系统的调度程序出于某种其他原因这么说,那么它们会交替使用。
像您的示例中那样的同时繁忙循环的行为可能对调度程序对程序外部事物的反应非常敏感。所以这不是你想要依赖的东西。
sleep(1)
如果您在循环内添加显式的内容,您应该会看到更一致的行为。或者,如果您确实希望两个进程尽可能快地交替执行某些操作,则需要实现某种同步。