c - 需要深入解释fork和exec

标签 c process exec fork

只有一个问题,当我 fork() 时,我创建了父进程和子进程。当我的 child 仍在运行时可以终止我的 parent 吗?

基本就这个图? Differences between fork and exec

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

另一种情况是我的 child 终止妊娠。我的 parent 能够收到来自 main 的返回值吗?如果是,我如何检索该值?

exec 和 execlp 有什么区别?

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

最佳答案

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

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

exec 系列在当前运行的进程内创建一个新的可执行文件,因此 PID 保留,但执行状态已初始化。

关于c - 需要深入解释fork和exec,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17260135/

相关文章:

ios - 如何在 NETunnelProviderManager 中找出 IP 流量的源进程

java - 使用 Java Desktop.open( FIle f ) 并知道应用程序已完成

Java/GPars - 我的线程池似乎得到 "clogged"

C-Execvp() 总是失败

关于 c 中的 *(星号) 和++ 的混淆

python - 如何向 distutils 添加 C 编译器选项

c - 删除 BST 中的节点

c - 简单的互斥应用程序无法正常工作?

c - 使用 exec() 函数在 C 中调用 Linux 命令

php - exec 函数不返回所有行