[C++-sig] Why can't kill process by Ctrl-c in a boost.python module with an endless loop
Jaedyn K. Draper
jaedyn.cppsig at jaedyn.co
Sun Dec 23 10:21:12 CET 2012
I was at least half right, then. Python was eating the signals. :)
As an alternative, to prevent yourself from having to do this in every
loop in your code, you might try this on the python side:
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
That'll stop Python from catching SIGINT globally and will always send
the SIGINT down to the C++ and terminate.
Of course, that may or may not be an option depending on your specific
needs.
On 12/23/2012 3:02 AM, simon zhang wrote:
> This is the answer from the stackoverflow.
>
> | while (true) { //endless loop
> ++it;
> std::cout<< it<<std::endl;
> sleep(3);
> if(PyErr_CheckSignals() == -1) {
> exit(1);
> }
> }|
>
> 2012/12/23 Jaedyn K. Draper <jaedyn.cppsig at jaedyn.co
> <mailto:jaedyn.cppsig at jaedyn.co>>
>
> Oh, my mistake. Not sure then, I've only embedded, never extended.
> Maybe someone else can help. :(
>
>
> On 12/23/2012 1:59 AM, simon zhang wrote:
>> But I don't call Py_Initialize().I call C++ code in
>> Python.Don't embed the Python to C++...
>>
>> 2012/12/23 Jaedyn K. Draper <jaedyn.cppsig at jaedyn.co
>> <mailto:jaedyn.cppsig at jaedyn.co>>
>>
>> Instead of Py_Initialize() (wherever it is you call it), try
>> calling Py_InitializeEx(0). Py_Initialize() (or
>> Py_InitializeEx(1)) binds signal handlers (including SIGINT)
>> to send python exceptions instead of killing the process.
>> This may be what's hitting you.
>>
>>
>> On 12/23/2012 1:44 AM, simon zhang wrote:
>>> I have make a boost.python module with an endless loop.But I
>>> can't kill the process by ctrl-c.The following is an example.
>>>
>>> C++
>>>
>>> |#include <boost/python.hpp>
>>> #include <boost/python.
>>> module.hpp>
>>> #include <boost/python.
>>> def.hpp>
>>> #include <iostream>
>>> usringnamespace 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()|
>>>
>>> result:
>>>
>>> |1
>>> 2
>>> 3
>>> 4
>>> .....................|
>>>
>>> I can't kill the foreground process by Ctrl-c.why the module
>>> don't accept signal "SIGINT" that was sent by Ctrl-c.How to
>>> make it work.
>>>
>>>
>>>
>>> _______________________________________________
>>> Cplusplus-sig mailing list
>>> Cplusplus-sig at python.org <mailto:Cplusplus-sig at python.org>
>>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig at python.org <mailto:Cplusplus-sig at python.org>
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>>
>>
>>
>>
>> _______________________________________________
>> Cplusplus-sig mailing list
>> Cplusplus-sig at python.org <mailto:Cplusplus-sig at python.org>
>> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org <mailto:Cplusplus-sig at python.org>
> http://mail.python.org/mailman/listinfo/cplusplus-sig
>
>
>
>
> _______________________________________________
> Cplusplus-sig mailing list
> Cplusplus-sig at python.org
> http://mail.python.org/mailman/listinfo/cplusplus-sig
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20121223/499d6dba/attachment-0001.html>
More information about the Cplusplus-sig
mailing list