无法在具有无限循环的 boost.python 模块中通过 Ctrl-c 杀死进程
can't kill process by Ctrl-c in a boost.python module with an endless loop
我做了一个提升。带有无限循环的Python模块。但是我不能按ctrl-c键终止进程。示例如下:
c++#include <boost/python.hpp>
#include <boost/python.module.hpp>
#include <boost/python.def.hpp>
#include <iostream>
usring namespace boost::python;
void foo() {
int it=0;
while (true) { //endless loop
++it;
std::cout<< it <<std::endl;
sleep(3);
}
}
BOOST_PYTHON_MODULE(ctopy)
{
def("foo",foo);
}
python: import ctopy
ctopy.foo()
结果:1
2
3
4
.....................
我不能通过Ctrl-c杀死前台进程。为什么模块不接受由Ctrl-c发送的信号"SIGINT"。如何让它工作
你应该在扩展代码中定期调用PyErr_CheckSignals(),如果它返回-1
则调用exit()
:
while (true) { //endless loop
++it;
std::cout<< it <<std::endl;
sleep(3);
if(PyErr_CheckSignals() == -1) {
exit(1);
}
}
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 使用 ctrl + C 在 python 中杀死C++进程
- 使用CREATE_NEW_PROCESS_GROUP创建主机时,向子进程发送Ctrl+C
- 无法在具有无限循环的 boost.python 模块中通过 Ctrl-c 杀死进程