Erwarten Sie: Ändern Sie das Verhalten von Strg-C

1525
LaC

Während exec ein Programm ausführt, möchte ich, dass Ctrl-C das Programm beendet und das Skript fortsetzt, anstatt das Skript zu beenden. Was ist der beste Weg, um das zu erreichen?

0
Um ein Programm zu stoppen, senden Sie SIGSTOP, normalerweise zugeordnet zu Ctl-Z. Wenn Sie unter erwartet laufen, sollten Sie den Befehl kill mit SIGSTOP verwenden können, aber ich kann mich nicht an die Details erinnern. Keith vor 13 Jahren 0

2 Antworten auf die Frage

0
glenn jackman

Sehen Sie, ob dies funktioniert: package require Tclx

Wenn es möglich ist, können Sie Signale mit dem signalBefehl einfangen.

expect soll angeblich [seine eigene Einrichtung] (http://rosettacode.org/wiki/Handle_a_signal#Tcl) haben, um Signale einzufangen. Das Problem ist, dass unter der Annahme, dass das ursprüngliche SIGINT an erwartet gesendet wird und mein Skript es fängt, ich ein SIGINT an das Programm senden muss, das ausgeführt wird, aber ich weiß nicht, wie man seine PID erhält . "exec" gibt eine PID nur aus offensichtlichen Gründen zurück, wenn Sie den Prozess im Hintergrund ausführen. LaC vor 13 Jahren 0
@ LaC, warum "spawn" du es nicht "exec"? glenn jackman vor 13 Jahren 0
Ich habe `exec` verwendet, weil ich das Programm nur so lange ausführen möchte, bis es abgeschlossen ist. Ich habe versucht, 'spawn' gefolgt von 'wait' zu verwenden, aber das macht es für SIGINT völlig unempfindlich. Ich musste schließlich -9 aussetzen und töten. Ich habe versucht, einen Signalhandler für SIGINT zu installieren, aber es wird nicht gerufen. LaC vor 13 Jahren 0
0
LaC

Am Ende habe ich das Programm ausgeführt execund mit dem trapBefehl von Expect SIGINT abgefangen. Das Unterprogramm wird noch beendet (in der Tat, es kann nicht ein Weg sein, um dies zu vermeiden verwendet exec), aber unter Verwendung von trapund catchum exec, kann die tcl - Skript weiter ausgeführt wird .