В чем разница между Ctrl-C и SIGINT?

Я отлаживал программу на Python, которая после полученияKeyboardInterrupt исключение. Обычно это делается нажатиемCtrl + C, из скорлупы Чтобы проверить, исправило ли конкретное изменение кода ошибку, у меня был небольшой shell-скрипт, который отправлялSIGINT в программу в произвольное время после запуска. У меня проблема в том, что отправкаCtrl + C, Похоже, что это влияет на программу иначе, чем отправка сигналаSIGINT и, следовательно, не приводит к появлению ошибки, поэтому я довольно удивляюсь, в чем же разница между этими двумя действиями.

Программа вообще не отлавливает какие-либо действия на клавиатуре и представляет собой просто программу на Python с некоторыми потоками / процессами в них. Он не устанавливает никаких обработчиков сигналов (хотя Python делает), иstty -a даетintr = ^C, Я подозреваю, что это может бытьCtrl + C, посылаетSIGINT для всех подпроцессов / потоков в то время какkill -INT только отправляет в основной процесс, но это далеко не все мои подозрения.

Вот сценарий оболочки, который отправляетkill -INT.

wait
while :; do
    seconds="$(python -c 'import random; print random.random()*4')"
    ./mandos --debug --configdir=confdir \
             --statedir=statedir --no-restore --no-dbus &
    pid=$!
    { sleep $seconds; kill -INT $pid; } &
    fg %./mandos
    status=$?
    if [ $status -gt 1 ]; then
        echo "Failed exit $status after $seconds seconds"
        break
    fi
    wait
done

Ответы на вопрос(2)

Ваш ответ на вопрос