私の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の方法はありますか?それとも、すでに「可能な最も基本的なプロセス」段階にありますか?
答え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
}