2013-02-26 27 views
14

Ben sinyalleriPython programından nasıl sinyal gönderebilirim?

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) 

Ben kill -USR1 pid

ile sinyaller gönderir Ama bu işleri USR1 dinler bu kodu var ben yukarıdaki piton komut dosyası içinde aynı sinyal göndermek nasıl böylece 10 saniye sonra o otomatik olarak USR1 gönderir ve kontrol etmek için iki terminal açmak zorunda kalmadan onu alır? Eğer SIGUSR1 yerine SIGALRM yakalamak isteyen varsa

cevap

5

, deneyin:

signal.alarm(10) 

Aksi takdirde, başka bir iş parçacığı başlatmak gerekir: Böylece

import time, os, signal, threading 
pid = os.getpid() 
thread = threading.Thread(
    target=lambda: (
    time.sleep(10), 
    os.kill(pid, signal.SIGUSR1))) 
thread.start() 

bu program:

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) 

bu çıktıyı üretir:

$ python /tmp/x.py 
My PID is: 3029 
Waiting... 
Waiting... 
Waiting... 
Waiting... 
Received: 14 
Waiting... 
Waiting... 
+0

Yukarıdaki satırı yukarıdaki betiğe yazmam gerek – user192082107

+0

Bu snippet'lerden herhangi birini, 10 saniyelik saatin başlamasını istediğiniz anda betiğinize koyun. Örneğin, doğrudan 'while' den önce yerleştirebilirsiniz. –

+0

Alarm sinyali göndermek istemiyorum ama "USR1", bu örneği benim geçerli betiğimde verebilir misin – user192082107

24

Sen os.kill() kullanabilirsiniz:

os.kill(os.getpid(), signal.SIGUSR1) 

Eğer sinyal göndermek istediğiniz kod bu her yerde koyun.

İlgili konular