【发布时间】:2012-02-12 20:07:21
【问题描述】:
我正在为一些需要分叉的作业编写程序,但我对共享变量和处理僵尸进程有点不清楚。
如果我有全局变量,父级和所有子级是否使用这些全局变量的相同“副本”?如果没有,有什么方法可以让他们联系 (
vfork?)?我知道什么是僵尸进程,但我不清楚如何摆脱它们。我的程序将分离出许多临时进程,所以我不知道我可以为每个进程单独
wait()。当父进程终止时,它会清除与之相关的所有僵尸,对吗?如果父母在孩子之前终止怎么办?孩子完成后会留下僵尸吗(这些是init()定期清除的)?可能完全回避问题 2,因为我实际上并不关心子进程的结果,有没有办法让它们根本不留下僵尸?我看到了一些关于
signal(SIGCHLD, SIG_IGN)的东西,但我不知道如何使用它,而且我发现它的联机帮助页有些迟钝。
【问题讨论】:
-
对于 1) 全局变量是共享的。您需要查看这些变量在各个线程之间的同步访问。
-
分叉创建了一个新的、独立的、独立的流程。也许您在考虑线程?
-
@Mahesh 分叉后,所有全局变量(以及执行分叉的函数中的本地变量)都相同,但它们不共享。父进程和子进程必须通过 IPC 的某些 kine 进行通信。
-
@JoachimPileborg: Moooo.... :-)
标签: c fork zombie-process