由于每个过程都在做自己的事情,这让我觉得更像是“兄弟/姐妹”的关系。调用父进程和子进程后是否有特定原因?
此外,父进程是否始终在子进程之前运行?
答案 0 :(得分:1)
父母拥有进程组,从而产生并收获子进程。通常这个过程会做一些管理工作,而孩子则扮演同龄人和兄弟姐妹的角色。
命名只是描述哪个进程产生了另一个进程的惯例。
答案 1 :(得分:0)
父进程和子进程根据您的代码执行工作,但不是因为父或子关系。当你在主线程中执行fork()时,它将创建一个子进程,这里fork返回一个在父进程和子进程中不同的值,可以用来相应地区分父进程和子进程的工作。 fork()总是在父进程中返回子进程的pid,在子进程中返回0。
转到第二个问题,一旦fork()被调用,它总是依赖于调度程序,并且我们无法预测在fork()函数调用之后首先运行哪个进程。
答案 2 :(得分:0)
调用父进程和子进程后是否有特定原因?
好吧,因为它创建了第二个进程(父进程)(子进程),这可能是命名的原因。
此外,父进程是否始终在子进程之前运行?
简短的回答。不。 我一直在我的所有C代码中使用它
pid_t pid = fork();
if(pid == 0){ // child
// Child stuff
}else{ // parent
// Parent stuff
}
您可能还想使用
waitpid(pid, NULL, 0);
答案 3 :(得分:0)
fork()
创建当前进程的副本,该进程是进程控制组的一部分。新进程从属于原始进程,例如当子进程终止时,SIGCHLD将发送给父进程。此外,克隆是一个劣质副本:例如,任何存储的getpid()
结果在孩子中都是不准确的;子项具有不同的parentid
,子项具有父项文件描述符的副本,并且具有独立的资源使用计数器。
然后,父进程始终是调用fork()
的进程,如果这是您首先运行的意思。如果你的意思是“调度程序是否总是首先给父进程切片”,那么答案就是否定。
请参阅:http://gauss.ececs.uc.edu/Courses/c694/lectures/ForksThreads/forks.html,http://linux.die.net/man/2/fork
#include <stdio.h>
#include <unistd.h>
int main(int argc, const char* argv[])
{
pid_t otherPid;
printf("parent pid = %u\n", getpid());
otherPid = fork();
// in the parent, otherPid = the child's (new) process ID
// in the child, otherPid = 0.
switch (otherPid) {
case -1:
printf("Fork failed: %d\n", errno);
return errno;
break;
case 0: // child
sleep(2);
printf("child: my pid is %u\n", getpid());
break;
default:
printf("parent: pid is %u, child should have %u\n", getpid(), otherPid);
sleep(3);
break;
}
return 0;
}
答案 4 :(得分:0)
父母总是在孩子面前。排序和甜蜜!!!