c-如果在fork()进程中没有父进程的操作,会发生什么



我有以下示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
int main (){
printf("hello world (pid:%d)n", (int)getpid());
int rc = fork();
if(rc < 0){ //fork failed; exit
fprintf(stderr, "fork failedn");
exit(1);
} else if (rc == 0) { //child new process
printf("hello, i am child (pid:%d)n", (int)getpid());
char *myargs[3];
myargs[0] = strdup("wc"); //program: "wc" (word count)
myargs[1] = strdup("p3.c"); //argument: file to count
myargs[2] = NULL; //marks end of array
execvp(myargs[0],myargs); //runs word count
printf("this shouldn't print out");
} else {//parent process
// int wc = wait(NULL);
// printf("hello, i am parent of %d (wc: %d) (pid: %d)n", rc, wc, (int) getpid());
}
return 0;
}

所以我已经注释掉了else语句(父进程的参数或操作。我想知道会发生什么,或者如果父进程不必等待子进程,输出会保持不变吗?如果是,为什么?

我在想,由于子进程是独立于父进程的独立进程,输出将保持不变,但这是唯一的原因吗?

一些指针会很好,谢谢!

这可以在两个上下文中理解。

  1. 父级的执行时间<儿童执行时间
  2. 父级执行时间>子级执行时间

在情况1中,父进程先于子进程退出,因此init进程(pid 1)成为子进程的父进程;子进程继续执行。

通常,在父进程完成之前,不能释放子进程(子进程的资源)。在情况2中,子进程只有在父进程完成之后才被释放;直到这时子进程变成僵尸(在ps -al命令中失效)。

在这个特定的上下文中,当父进程没有要执行的内容时,子进程的执行时间>父进程的执行速度,这只是父进程执行时间<子级的执行时间。这是情况1。因此,父进程退出,init进程成为子进程的父进程。

相关内容

最新更新