[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