C++ アプリケーションの Mac ポートを終了するための簡単でキャッチできない方法を探しています。私が使用していたWindowsで
TerminateProcess(GetCurrentProcess, 0);
Mac OS X / XCode / GCC で使用できる同等のコマンドは何ですか?
_exit
と同じセマンティクスが必要な場合は、実際に必要ですTerminateProcess
。exit
セマンティクスは とより密接に連携していExitProcess
ます。
ProcessTerminateに近いのは、killを指定してSIGKILLを送信することです。どちらも、現在のプロセスをすぐに終了し、トラップすることはできません。これは_exitと同じです
kill(getpid(), SIGKILL);
終了 (0);
実際には、exit() と _exit() の両方に CRT が関与しているため、さまざまなアクションが引き続き実行されます。(atexitについてはわかりません。チェックしていません)
Windows の TerminateProcess は OS レベルであるため、すべての CRT を回避します。Mac で同じことをしたい場合は、mach 関数で手を汚すのが最善の策です。この場合:
#include <mach/mach.h>
... // lots of your code here
task_terminate(mach_task_self());
それはあなたが得ることができるのと同じくらいキャッチ不可能です。
exit() または TerminateProcess() を呼び出すと、アプリケーションがすぐに終了することに注意してください。つまり、デストラクタが呼び出されず、実行されると予想されるクリーンアップが実行されません (もちろん、OS は可能な限りすべてをクリーンアップします)。 .