Как я могу отправить сигнал из программы python?

У меня есть этот код, который прослушивает сигналы 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 а также получил его, без необходимости открывать два терминала для проверки?

  • Использование фильтра срезов с данными контекста из QuerySet Django
  • Python / BeautifulSoup - как удалить все теги из элемента?
  • Прочтите USB-устройство чтения карт памяти с Linux? OMNIKEY CardMan 3121 USB
  • Не удается получить доступ к приложению django через IP-адрес при доступе к нему через localhost
  • в чем разница между возвратом и перерывом в python?
  • Python + OpenCV: сегментирование изображения OCR
  • Использование mock для исправления задачи сельдерея в модульных тестах Django
  • OCR для нот
  • 2 Solutions collect form web for “Как я могу отправить сигнал из программы python?”

    Вы можете использовать os.kill () :

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

    Поместите это где-нибудь в свой код, из которого вы хотите отправить сигнал.

    Если вы хотите поймать 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) 

    производит этот вывод:

     $ python /tmp/x.py My PID is: 3029 Waiting... Waiting... Waiting... Waiting... Received: 14 Waiting... Waiting... 
    Python - лучший язык программирования в мире.