如何给自己发送信号(同一PID)?
好的,这可能是个奇怪的情况,但请耐心听我说。
我有一个Python程序,它通过SWIG接口调用一个C++类。现在我需要从C++库异步地向Python代码发送信号(更新状态)。最开始我用的是效率很低的忙等待循环来检查一个标志位。我想用SIGUSR1
来替换这个方法。
问题是,我发现虽然这些是不同的“线程”,但它们共享同一个进程ID(PID)。也就是说,Python和C++程序的PID是一样的。我用kill
命令发送了信号,Python代码在它的处理函数中捕获到了这个信号,但并没有像我预期的那样中断代码。我尝试了两种在Python代码中等待信号的方法,第一种是调用Python的signal.pause
,我听说这个方法在收到信号时应该会被打断。另一种是简单的time.sleep
,这个方法也应该有类似的效果——在信号到来时返回。
但不知为什么,这些方法都没有奏效——我的C++代码发送了信号,Python代码接收到了并调用了处理函数,但暂停/睡眠的调用却从未返回。
如果可以正确地向同一个进程发送信号,你会怎么做呢?
(如果这只是个愚蠢的问题,请原谅我,继续往下看吧)