如何从python程序发送信号?
我有一个监听USR1信号的代码如何从python程序发送信号?,python,linux,signals,Python,Linux,Signals,我有一个监听USR1信号的代码 import signal import os import time def receive_signal(signum, stack): print 'Received:', signum signal.signal(signal.SIGUSR1, receive_signal) signal.signal(signal.SIGUSR2, receive_signal) print 'My PID is:', os.getpid() while
import signal
import os
import time
def receive_signal(signum, stack):
print 'Received:', signum
signal.signal(signal.SIGUSR1, receive_signal)
signal.signal(signal.SIGUSR2, receive_signal)
print 'My PID is:', os.getpid()
while True:
print 'Waiting...'
time.sleep(3)
当我使用kill-USR1 pid发送信号时,这一点就起作用了
但是,如何从上述python脚本中发送相同的信号,以便在10秒钟后它自动发送并接收USR1
,而不必打开两个终端进行检查?如果您希望捕获SIGALRM
而不是SIGUSR1
,请尝试:
signal.alarm(10)
否则,您需要启动另一个线程:
import time, os, signal, threading
pid = os.getpid()
thread = threading.Thread(
target=lambda: (
time.sleep(10),
os.kill(pid, signal.SIGUSR1)))
thread.start()
因此,该计划:
import signal
import os
import time
def receive_signal(signum, stack):
print 'Received:', signum
signal.signal(signal.SIGUSR1, receive_signal)
signal.signal(signal.SIGUSR2, receive_signal)
signal.signal(signal.SIGALRM, receive_signal) # <-- THIS LINE ADDED
print 'My PID is:', os.getpid()
signal.alarm(10) # <-- THIS LINE ADDED
while True:
print 'Waiting...'
time.sleep(3)
您可以使用:
将这段代码放在您希望发送信号的代码中的任何位置。我需要将这一行放在我上面的脚本中的什么位置?您可以在希望10秒时钟开始时将这些代码片段中的任何一个放在脚本中。例如,您可以将其直接放在while
之前。我不想发送报警信号,但USR1
,您能在我当前的脚本中给出该示例吗?它与signal.alarm()位于同一位置。是否尝试将其添加到脚本中?这对于docker容器提交seppuku非常有用
$ python /tmp/x.py
My PID is: 3029
Waiting...
Waiting...
Waiting...
Waiting...
Received: 14
Waiting...
Waiting...
os.kill(os.getpid(), signal.SIGUSR1)