Re: Neue BSD Webseiten

From: Martin Cracauer <cracauer(at)cons.org>
Date: Tue, 6 Apr 1999 08:59:18 +0200

Hallo,

danke fuer's feedback erstmal.

In <199904050240.EAA12312(at)dorifer.heim3.tu-clausthal.de>, Oliver Fromme wrote:
> > 3) Eine Erklaerung, wie man vernuenftig mit SIGINT/SIGQUIT
> > bzw. C-c/C-\ in Programmen umgeht. Ist die Webseite einigermassen
> > verstaendlich? http://www.cons.org/cracauer/sigint.html
>
> Fand ich sehr interessant. Ich persönlich benutze die zsh
> (3.0.5, aus den Ports), die in Deiner Beschreibung "Typ 3"
> entspricht. Ich gebe Dir Recht, daß "Typ 4" die meisten Vor-
> teile bietet (aber ich werde dennoch bei der zsh bleiben ;-)
>
> Ich werde auf jeden Fall zukünftig meine Programme so schrei-
> ben, daß sie sich bei einem abgefangenen SIGINT selbst killen.
>
> Ein schönes Beispiel wäre mpg123 -- ein SIGINT läßt es den
> momentanen Track abbrechen und zum nächsten gehen. Folgt ein
> weiterer SIGINT innerhalb einer Sekunde, terminiert das Pro-
> gramm. Ein Kandidat für kill(getpid(),SIGINT), würde ich
> sagen. ;-)

Exact. Angenommen, man moechte eine Folge von 10 Titeln spielen und 5
davon muessen einen anderen mpg123-Aufruf haben als die anderen 5.

Wenn man dann ein shellscript drumlegt, dass zweimal mpg123 mit
jeweils 5 Tracks aufruft, dann muss sich mpg123 selbst
killen. Ansonsten wuerde das shellscript nach einem
SIGINT-(Komplett-)Abbruch innerhalb der ersten 5 Tracks die zweite
5er-Folge aufrufen. Wenn man 200 mpg123-Aufrufe in einem script
haette, wuerde das ziemlich laestig werden.

Ich finde allerdings, dass diese Doppelbelegung von SIGINT sowieso
eher maessig ist. SIGQUIT kann man auch problemlos von der Console
senden und fuehrt zu einem direkt abfangbarem Signal im Programm. Fuer
zwei Funktionen wuerde ich also lieber die beiden verschiedenen
Consolensignale nehmen.

> Ich frage mich gerade, ob man das "Typ 4"-Verhalten in zsh-
> Skripten emulieren könnte, etwa durch Trappen von SIGINT und
> Abfragen von "$?" nach "kritischen" Kommandos (analog mit
> SIGQUIT):
>
> trap "" 2
> ...
> <kritisches Kommando>
> if [ $? -gt 127 ]; then
> trap 2
> kill $$
> fi
>
> In einem ersten, einfachen Test scheint's zu funktionieren.

Ja, das sollte so gehen. Wenn man shellscripte so schreiben will, dass
sie auf verschiedene Bourne-shell-Varianten identisch laufen, dann
muss man *immer* mit traps SIGINT and SIGQUIT fangen, auch wenn man
im Traphandler eigentlich nur Aktionen durchfuehrt, die bei den
meisten shells der default sind. Aber dann muss man auch dran denken,
sich selbst zu killen, sonst schafft man mehr Probleme als man loest.

Die Notwendigkeit, traps zu setzen ist in gewisser Weise auch von
POSIX vorgegeben. POSIX sagt nichts zu dem Thema meiner Webpage, also
zum Defaultverhalten. Posix spezifiziert aber, was der trap-builtin
tun muss und damit kriegt man die shells auf einen gemeinsamen Nenner
gezogen.

Ich werde die Webpage uebrigens noch mal umbauem. Faellt jemandem noch
was ein. Z.B. Die Anhang-Tabelle nach vorne oder mehr Beispiele
oder...?

Martin

-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org> http://www.cons.org/cracauer/
  Tel.: (private) +4940 5221829 Fax.: (private) +4940 5228536
  Paper: (private) Waldstrasse 200, 22846 Norderstedt, Germany
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-hackers" in the body of the message
Received on Tue 06 Apr 1999 - 08:59:52 CEST

search this site