我的 C++ 程序做了一些工作,然后等待信号来终止它。我想退出,但退出会向父进程发送 SIGCHLD,我需要控制其时间。
所以目前我做以下事情:
int main() {
run(); // do stuff, then free() and close() everything possible.
for (;;) pause(); // wait for signal to kill us
return 0;
}
因此,完成后run()
,程序只是坐在那里然后就死掉了。
是否有一些很好的 linux-y 方式来表示“这个程序现在不需要任何东西,释放堆栈和其他所有东西”,或者我已经处于“可能的最基本进程”阶段?
答案1
假设你必须按照你所说的去做(我对此表示怀疑),并且假设你的程序很大,所以使用了大量的内存。
想法1
您可以使用exec
另一个较小的程序来进行等待。
然而,最有效的方法是退出,这样可以释放几乎所有内容,除了进程表中的条目和退出值。然后该进程将成为僵尸进程,直到父进程处理 SIGCHLD(或者父进程死亡,在这种情况下,`init 成为父进程,并非常快速地处理 SIGCHLD)。
想法2
写一个包装器。这样,孩子就不需要修改,你就不再扭曲孩子的代码,以弥补糟糕的养育。
包装器只能包含运行子进程、等待、退出。例如
int main() {
fork and exec child
wait for child
wait for signal from parent
return child exit code
}