Ожидайте: Изменить поведение Ctrl-C

1455
LaC

Пока exec запускает программу, я бы хотел, чтобы Ctrl-C завершал работу программы и возобновлял выполнение сценария, а не убивал сценарий. Какой лучший способ сделать это?

0
Чтобы остановить программу, отправьте SIGSTOP, обычно сопоставленный с Ctl-Z. Если вы запускаете в режиме ожидания, вы можете использовать команду kill с SIGSTOP, но я не помню деталей. Keith 13 лет назад 0

2 ответа на вопрос

0
glenn jackman

Посмотрите, работает ли это: package require Tclx

Если это возможно, то вы можете перехватывать сигналы с помощью signalкоманды.

Ожидается, что ожидаемо иметь [свой собственный объект] (http://rosettacode.org/wiki/Handle_a_signal#Tcl) для перехвата сигналов. Проблема заключается в том, что, предполагая, что исходный SIGINT отправляется на «ожидаемый», и мой скрипт его перехватывает, мне нужно было бы отправить SIGINT в программу, выполняемую «exec», но я не знаю, как получить его PID , exec возвращает PID только в том случае, если вы работаете в фоновом режиме по очевидным причинам. LaC 13 лет назад 0
@LaC, почему бы тебе не «породить» его вместо «исполняющего»? glenn jackman 13 лет назад 0
Я использовал `exec`, потому что я просто хочу запустить программу, пока она не завершится. Я попытался использовать `spawn` с последующим` wait`, но это делает его абсолютно непроницаемым для SIGINT. Мне пришлось приостановить и убить -9. Я попытался установить обработчик сигнала для SIGINT, но он не вызывается. LaC 13 лет назад 0
0
LaC

В итоге я запустил программу, используя execи ожидая trapкоманду перехвата SIGINT. Подпрограмма по-прежнему завершается (на самом деле может не быть способа избежать этого exec), но при использовании trapи catchвокруг execсценарий tcl может продолжать выполняться.