Как исправить ошибку Bus Error в коде Python для получения сигнала? - PullRequest
0 голосов
/ 06 марта 2019

Я создал код Python, следующий за этим описанием :

import os
import time
import signal

def receiveSignal(signalNumber, frame):
    print('Received:', signalNumber)
    return

signal.signal(signal.SIGUSR1, receiveSignal)

# output current process id
print('My PID is:', os.getpid())

# wait in an endless loop for signals
while True:
    print('Waiting...')
    time.sleep(3)

, который работает нормально.Но когда я пытаюсь отправить сигнал SIGUSR1 с другого терминала, например:

kill -10 55947

, код python завершается следующим образом:

My PID is: 55947
Waiting...
Waiting...
Bus error: 10

Код работает на MacOS 10.13.6, и я попытался использовать Python 2.7.12 и Python 3.6.2.В обоих случаях я получаю это Bus Error.

Есть ли способ это исправить?Может быть, это проблема Mac?Я ожидаю, что выполняющийся код выполнит метод receiveSignal, но в противном случае останется в цикле shile.

1 Ответ

1 голос
/ 06 марта 2019

Я думаю, проблема в MacOS: SIGNAL 10 означает SIGBUS.

См. Список сигналов https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/signal.3.html

См. Подробности сигнала,

     1     SIGHUP       terminate process    terminal line hangup
     2     SIGINT       terminate process    interrupt program
     3     SIGQUIT      create core image    quit program
     4     SIGILL       create core image    illegal instruction
     5     SIGTRAP      create core image    trace trap
     6     SIGABRT      create core image    abort program (formerly SIGIOT)
     7     SIGEMT       create core image    emulate instruction executed
     8     SIGFPE       create core image    floating-point exception
     9     SIGKILL      terminate process    kill program
     10    SIGBUS       create core image    bus error
     ...
     ...
     30    SIGUSR1      terminate process    User defined signal 1
     31    SIGUSR2      terminate process    User defined signal 2

Отсюда и ошибка.

Попробуйте отправить SIGNAL 30 и посмотрите:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...