在 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() 函数, 具体问题在以下代码的注释处