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