-3

只有 1 个问题,当我 fork() 时,我创建了父进程和子进程。可以在我的孩子还在跑步时终止我的父母吗?

基本在这个图上?fork 和 exec 的区别

if(!fork())
{
  //child
  while(1);
}
else
{
  //parent
  exit();
}

另一种情况是如果我的孩子终止了。我的父母能够从 main 收到返回值吗?如果是,我如何检索值?

exec 和 execlp 有什么区别?

最后,我知道当您执行时,您会覆盖内存(堆、堆栈、文本、数据)。基本上,调用 new .exe 。但是在PCB下呢?只有PID,PPID保留而状态和sp全部覆盖?

4

1 回答 1

1

当您 时fork,您将创建一个全新且独立的流程。孩子继承了某些方面,比如打开的文件描述符和其他东西。因此,您可以退出父级,子级将继续运行。

为了检索孩子的退出代码和状态,您可以使用pid_t waitpid(pid_t pid, int *status, int options);并相应地解释状态。事实上,为了避免僵尸进程,无论如何你都应该等待孩子。

exec族在当前运行的进程中创建了一个新的可执行文件,因此 PID 保持不变,但执行状态已初始化。

于 2013-06-23T11:14:14.220 回答