如何立即杀死我的程序

时间:2015-01-19 23:09:54

标签: c++

如何立即终止我的程序(使用代码)

  • 我不想要使用析构函数。
  • 我不想要任何钩子来执行。
  • 我只想用最简单的方法来杀死程序。

(我没有找到答案,说这不是犹太人。我知道它不是。)

编辑:寻找Windows和Linux解决方案。

EDIT2:我在Windows上尝试exit_exitabortterminate但没有成功。

EDIT3:虽然我还没有访问Linux机器,但我能够使用以下代码成功终止我的Windows程序:

int pid = _getpid();
char buff[256];
sprintf(buff, "taskkill /pid %d /f", pid);
system(buff);

5 个答案:

答案 0 :(得分:7)

只需致电LinuxWindows上的_exit()即可。它不会产生像abort()那样的核心转储。

修改:如果_exit()不够好,您可能需要针对特定​​平台。

在Windows上,您可以调用TerminateProcess(),据我所知,这是杀死Windows API公开的进程的最有力/最直接的方法(尽管如果有一个更强大的方法我会喜欢了解它。)

在Linux上,提升SIGKILL可能会更好,suggested by Jeffery Thomas。我实际上不知道SIGKILL是否比_exit()更强大/更直接。

这两种方法都是异步的。

答案 1 :(得分:7)

在符合POSIX标准的UNIX系统上,raise(SIGKILL)可以执行您想要的操作。


对于Windows,TerminateProcess(GetCurrentProcess(),0)是我首先要看的。注意:这可能会导致全局共享DLL的问题。


作为最后的评论,你没有提供任何细节,但是无论你想做什么,如果这是你的出路,那你就是错误的做法。

答案 2 :(得分:3)

使用_exit()。这将立即杀死你的程序。

答案 3 :(得分:1)

尝试在C中调用abort()函数,或在C ++中调用std::terminateterminate也是Visual C ++中的C函数,但它是非标准的。)

答案 4 :(得分:1)

在C ++ 11中_Exit(注意:大写E)被指定为§18.5/ 3

  

程序终止而不执行自动,线程或的对象的析构函数   静态存储持续时间且没有调用函数传递给atexit()

如果您希望执行可能的处理程序,则可以调用std::quick_exit来调用已注册的处理程序,然后调用_Exit