想法1

想法1

我的 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
}

相关内容