2014-02-20 32 views
0

我正在寻找一个简单的python进程,开始在后台运行,循环计数分钟。我想发送一个信号(从脚本外部)到进程来打破循环。可能有许多这些脚本同时打开和运行。来自听众的循环中断

while True: 
    timer=timer+1 
    time.sleep(60) 
    # listener that receives a signal from outside the program 
    # to stop the loop return timer and then end the program 
    if (timeup==True): 
     break 
+0

你想Python,你说,但你的标题和标签都是指PHP。你到底在问什么? – 2014-02-20 22:39:03

+0

我宁愿PHP,但经过一些基础研究后,似乎它会更容易在python或c中完成 –

回答

2

您可以使用signal

import signal, time, os 

abort = False 
def stop(sig, stack): 
     global abort 
     print('Got signal!') 
     abort = True 

signal.signal(signal.SIGUSR1, stop) 

print('My pid: %s' % os.getpid()) 

while True: 
     time.sleep(1) 
     print('Hello') 

     if (abort): 
       break 

这将输出类似:

[~]% python test.py 
My pid: 24341 
Hello 
Hello 
Hello 

然后可以使用kill(1)发送信号:

[~]% kill -USR1 24341 

一就我所能找到的那样,没有明显的方法可以发送来自Python的信号,但你可以使用subprocess模块开始kill(有点丑陋,但有效)。

您可以在PHP中使用相同的技术。请参阅pcntl_signal()(您需要安装pcntl模块)。

另见:

进程间通信(IPC),你可以使用可能是其他方法:

  • 文件与状态
  • 共享备忘录RY
  • FIFO
  • 发送通过网络

我不会为所有这些提供了示例数据(也效果很好,当两个程序都在同一台机器上),恕我直言使用的信号是这里最明显的选择。