Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从python程序发送信号?_Python_Linux_Signals - Fatal编程技术网

如何从python程序发送信号?

如何从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

我有一个监听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 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)