假设我们有一个父进程,如果它调用一个 exec 函数,则在调用一个 fork 创建子进程之后。
现在子进程会发生什么:它会像原始父进程一样工作,这样用户就不会发现父进程被其他二进制文件替换的区别吗?
我认为这个问题与以下问题不同 ,子进程会发生什么?.
if ( (pid == fork ()) != 0 )
{
if (strcmp(cmd,"mypwd")==0)
{
execlp (“mypwd”,0);
}
...
...
else if (strcmp(cmd,"myexit")==0)
exit(1);
}
Run Code Online (Sandbox Code Playgroud)
父进程的 pid 将在 之后保持不变exec,因此进程层次结构不会受到影响。
这种方法的问题在于,新替换的父进程通常不会意识到它之前已经生成了一个子进程,并且不会调用wait或调用waitpid它。这会导致子进程退出时变成僵尸进程。