在 C++11 中,signal.h 标头没有终止功能

Posted

技术标签:

【中文标题】在 C++11 中,signal.h 标头没有终止功能【英文标题】:In C++11 the signal.h header has no kill function 【发布时间】:2018-06-12 14:40:48 【问题描述】:

我刚刚尝试在 C++11 模式下使用 Gnu g++ 编译我不久前编写的代码,以查看代码是否需要很快重做(我还计划在 C++17 模式下对其进行测试)原因)。

我发现 kill() 函数导致编译器错误,并且似乎在 signal.h 标头中不再存在 kill 函数。

我只是将http://www.cplusplus.com/reference/csignal/ 视为参考,这似乎证实这不仅仅是 Gnu 特定的遗漏,而且似乎在标准中。

我在任何地方都找不到这种遗漏的理由,也找不到任何关于在没有它的情况下我应该如何管理流程的建议。谁能指出我正确的方向?

【问题讨论】:

你为什么不分享minimal reproducible example? kill 是一个 POSIX 函数,而不是标准 C++(或标准 C)的一部分。 @Scheff kill 适用于进程,而不是线程。 @NeilButterworth 哎呀,我在哪里看到线程?我的错。是时候离开办公室了…… 【参考方案1】:

C++ 标准函数是raise

kill 是一个 POSIX 函数,它需要 POSIX 进程 id pid_t,而 C++ 标准中不需要。

【讨论】:

【参考方案2】:

好的,我发布这个问题太快了,当然 fork/kill 等首先不是 C++ 标准的一部分,而是在类 unix 平台上的常见添加。

我真正的问题是我使用了错误的编译器开关。对于遇到此问题的其他人,要获得严格的 C++11 标准,请使用:

g++ -std=c++11

但要获得 C++11 标准和非标准扩展,请使用:

g++ -std=gnu++11

使用后者,我可以构建和调用 fork/kill 没问题。

【讨论】:

以上是关于在 C++11 中,signal.h 标头没有终止功能的主要内容,如果未能解决你的问题,请参考以下文章

Linux 环境下的C语言, 关于 kill 发送信号和 signal() 函数, 具体问题在以下代码的注释处

C等待信号循环

终止具有关键部分代码的POSIX多线程应用程序的最佳方法是什么?

一个简单的signal实例(c语言)

请教signal的问题

请教signal的问题