我对fork()系统调用有这些愚蠢的疑虑, 如果有人请回答这些问题,请不胜感激。
例如 -
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
pid=fork();
if(pid==0)
{
printf("Child Process");
}
else if(pid>0)
{
printf("Parent Process");
}
else
{
printf("Unable to create");
}
}
我试过这段代码 -
#include<stdio.h>
int main()
{
int x;
x=fork();
if(x==0)
{
printf("Child Process");
}
else if(x>0)
{
printf("Parent Process");
}
else
{
printf("Unable to create");
}
}
有人可以 请回答我的问题?
答案 0 :(得分:4)
使用pid_t
表示源代码可移植到例如使用64位PID的系统。
进程按该顺序执行,因为这是调度程序决定执行它们的方式。
答案 1 :(得分:1)
这里pid_t是64位unsigned int,你可以在头文件中找到它。这基本上用于使程序可移植。
为什么父进程先行?
答: 1。在分叉进程之后,子进程必须复制父进程的内存布局(复制头部,堆栈,初始化数据,未初始化数据),因此父进程无关,所以在大多数情况下,父进程必须先执行。
但是在少数情况下,当孩子首先执行时,只有在父调度时间到期时才会执行。
在UNIX系统/ proc / sys / kernel / sched_runs_first中,将此值设为1以确保子进程首先运行。
总之,这种行为没有定义和不明确,最好使用任何同步方法。