当父进程调用 exec 命令时,子进程会发生什么

Amr*_*hna 5 c unix linux

假设我们有一个父进程,如果它调用一个 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)

Bla*_*iev 6

父进程的 pid 将在 之后保持不变exec,因此进程层次结构不会受到影响。

这种方法的问题在于,新替换的父进程通常不会意识到它之前已经生成了一个子进程,并且不会调用wait或调用waitpid它。这会导致子进程退出时变成僵尸进程。