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
を送信し、それを受信します。2つのターミナルを開いて確認する必要はありません。それ?
SIGUSR1
ではなくSIGALRM
を取得する場合は、以下を試してください。
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)
この出力を生成します:
$ python /tmp/x.py
My PID is: 3029
Waiting...
Waiting...
Waiting...
Waiting...
Received: 14
Waiting...
Waiting...