Я ищу простой и незаметный способ завершить порт Mac моего приложения C++. В Windows я использовал
TerminateProcess(GetCurrentProcess, 0);
Какую эквивалентную команду я могу использовать с Mac OS X/XCode/GCC?
Я ищу простой и незаметный способ завершить порт Mac моего приложения C++. В Windows я использовал
TerminateProcess(GetCurrentProcess, 0);
Какую эквивалентную команду я могу использовать с Mac OS X/XCode/GCC?
На самом деле вам нужен _exit
, если вы хотите иметь ту же семантику, что и TerminateProcess
. Семантика exit
более тесно связана с ExitProcess
.
Ближе к ProcessTerminate будет отправить SIGKILL с kill, оба немедленно завершают текущий процесс и не могут быть перехвачены. Это то же самое, что и _exit.
kill(getpid(), SIGKILL);
raise(SIGKILL)
.
- person Peter Hosey; 06.09.2009
выход (0);
Имейте в виду, что если вы вызовете exit() или TerminateProcess(), вы немедленно завершите свое приложение, т.е. никаких вызовов деструктора, никакая очистка, которую вы можете ожидать, не будет выполнена (конечно, ОС очищает все, что может) .
На самом деле и exit(), и _exit() задействуют CRT, а это означает, что различные действия по-прежнему выполняются. (насчет atexit не уверен, не проверял)
TerminateProcess в Windows находится на уровне ОС, поэтому он обходит все CRT. Если вы хотите сделать то же самое на Mac, лучше всего запачкать руки функциями Mach. В таком случае:
#include <mach/mach.h>
... // lots of your code here
task_terminate(mach_task_self());
Это настолько неуловимо, насколько это возможно.