如何立即终止我的程序

问题描述 投票:0回答:5

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

    我不想调用析构函数。
  • 我不想执行任何钩子。
  • 我只想以最低限度的方式杀死该程序。
(我不是在寻找说这不符合犹太教规的答案。我知道事实并非如此。)

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

EDIT2:我在 Windows 上尝试过

exit

_exit
abort
terminate
,但没有成功。

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

int pid = _getpid(); char buff[256]; sprintf(buff, "taskkill /pid %d /f", pid); system(buff);
    
c++
5个回答
7
投票
只需调用

_exit()

,即可在 
LinuxWindows 上使用。它不会像 abort()
 那样产生核心转储。

编辑:如果_exit()

对您来说不够好,您可能必须针对特定平台。

在 Windows 上,您可以调用

TerminateProcess()

,据我所知,这是终止 Windows API 公开的进程的最有力/最直接的方法(尽管如果有更强有力的方法,我很乐意了解一下)。

在 Linux 上,提高

SIGKILL

 可能会更好,正如 Jeffery Thomas 
建议的那样。我实际上不知道SIGKILL是否比
_exit()
更有力/更直接。

这两种方法都是异步的。


7
投票

raise(SIGKILL)

 将执行您想要的操作。

对于 Windows,我首先会看的是

TerminateProcess(GetCurrentProcess(),0)

。注意:这可能会导致全局共享 DLL 出现问题。

作为最后的评论,您没有提供任何细节,但无论您尝试做什么,如果这是您的出路,那么您都以错误的方式做。


3
投票
_exit()

。这将立即终止您的程序。

    


1
投票
abort()

函数,或在 C++ 中调用

std::terminate
terminate
也是 Visual C++ 中的 C 函数,但它是非标准的。)
    


1
投票
_Exit

(注意:大写

E
)被指定为 §18.5/3

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

 的函数

如果您希望执行可能的处理程序,那么您可以调用
std::quick_exit

,它会调用已注册的处理程序,然后调用

_Exit
    

© www.soinside.com 2019 - 2024. All rights reserved.