Эквивалент Mac OS X для TerminateProcess (GetCurrentProcess, 0); - PullRequest
2 голосов
/ 19 февраля 2009

Я ищу простой и неуловимый способ прервать порт Mac моего приложения C ++. В Windows я использовал

TerminateProcess(GetCurrentProcess, 0);

Какую эквивалентную команду я могу использовать с Mac OS X / XCode / GCC?

Ответы [ 5 ]

6 голосов
/ 19 февраля 2009

На самом деле вы хотите _exit, если хотите иметь ту же семантику, что и TerminateProcess. Семантика exit более тесно связана с ExitProcess.

3 голосов
/ 19 февраля 2009

Ближе к ProcessTerminate будет отправлять SIGKILL с kill , оба немедленно завершают текущий процесс и не могут быть захвачены. Это то же самое, что _exit

kill(getpid(), SIGKILL);
1 голос
/ 29 октября 2010

На самом деле, и exit (), и _exit () включают CRT, что означает, что все еще выполняются различные действия. (Не уверен насчет atexit, я не проверял)

TerminateProcess в Windows находится на уровне ОС, поэтому обходит все CRT. Если вы хотите сделать то же самое на Mac, лучше всего запачкать руки функциями маха. В этом случае:

#include <mach/mach.h>

... // lots of your code here

task_terminate(mach_task_self());

Это так же неуловимо, как вы можете получить.

1 голос
/ 19 февраля 2009

Имейте в виду, что если вы вызовете exit () или TerminateProcess (), вы немедленно прекратите работу приложения, то есть никаких вызовов деструкторов, никакой очистки, которую вы ожидаете, не будет выполнено (конечно, ОС очищает все может).

1 голос
/ 19 февраля 2009

Выход (0);


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...