gpt4 book ai didi

子进程在父进程之后启动

转载 作者:IT王子 更新时间:2023-10-29 00:18:23 25 4
gpt4 key购买 nike

我有一个简单的代码来测试 fork() 函数。

    #include<stdio.h>
#include<unistd.h>
#define MAX_COUNT 10
void main(void)
{
pid_t pid;
int i;
fork();
pid = getpid();
for(i = 1; i <= MAX_COUNT; i++)
{
printf("PID = %d, i = %d\n", pid, i);
}
}

它没有像我预期的那样工作。

我的期望是: parent 的结果和 child 的结果交替出现。有人可以解释一下并教我如何解决吗?谢谢!

    PID = 3663, i = 1
PID = 3663, i = 2
PID = 3663, i = 3
PID = 3663, i = 4
PID = 3663, i = 5
PID = 3663, i = 6
PID = 3663, i = 7
PID = 3663, i = 8
PID = 3663, i = 9
PID = 3663, i = 10
PID = 3664, i = 1
PID = 3664, i = 2
PID = 3664, i = 3
PID = 3664, i = 4
PID = 3664, i = 5
PID = 3664, i = 6
PID = 3664, i = 7
PID = 3664, i = 8
PID = 3664, i = 9
PID = 3664, i = 10

最佳答案

解释很简单。进程的调度取决于内核。如果这是一个单核处理器,那么在这次运行中它决定暂停子进程并允许父进程先运行。 parent 跑了几个循环,然后被暂停以支持 child ,依此类推。
在多处理器系统中,两个进程可以串联运行,但控制台设备将根据中断时间交替输出。

不能保证不同的运行会产生相同的输出。也无法保证不同的内核版本不会执行其他操作。

如果您希望进程在循环之间交替,现在是学习的时候了interprocess communication .

关于子进程在父进程之后启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31198079/

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