Hallo zusammen, fast glaubte ich mit trap sicher zu sein. Rennt aber tar, kann ich hier wieder mit strg+c abbrechen und genau das waere fatal! Beispiel: trap "echo Bitte nicht unterbrechen!" SIGINT mytest() { setze system rw tar -czf /bla.tgz /bla/* tar -czf /blub.tgz /blub/* tar -czf /... mach was anderes setze system ro } mytest Sobald tar seine Arbeit tut, kann ich mit strg+c unterbrechen! Bin also wieder ratlos. man tar bin ich gerade durch. Hatte gehofft, eine interne Option zu finden. Leider nein, oder ich bin blind. MfG Th. Moritz -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Thomas! On Mo, 14 Dez 2009, Thomas Moritz wrote:
Hallo zusammen, fast glaubte ich mit trap sicher zu sein. Rennt aber tar, kann ich hier wieder mit strg+c abbrechen und genau das waere fatal! Beispiel:
trap "echo Bitte nicht unterbrechen!" SIGINT
mytest() { setze system rw tar -czf /bla.tgz /bla/* tar -czf /blub.tgz /blub/* tar -czf /... mach was anderes setze system ro }
mytest
Ich bin mir nicht sicher, ab ich würde die Prozesse im Hintergrund starten. Also: tar ... & wait tar .... & wait Damit sollte immer Dein Script die Signale erhalten und nicht der aufgerufene Subprozess (der dann sein eigenes Signalhandling machen kann) Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 14. You start introducing yourself as "Jim at I-I-Net dot net dot au" -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
On Monday 14 December 2009 16:08:24 Christian Brabandt wrote:
fast glaubte ich mit trap sicher zu sein. Rennt aber tar, kann ich hier wieder mit strg+c abbrechen und genau das waere fatal! Beispiel:
trap "echo Bitte nicht unterbrechen!" SIGINT
mytest() { setze system rw tar -czf /bla.tgz /bla/* tar -czf /blub.tgz /blub/* tar -czf /... mach was anderes setze system ro }
mytest
Ich bin mir nicht sicher, ab ich würde die Prozesse im Hintergrund starten. Also:
tar ... & wait tar .... & wait
Damit sollte immer Dein Script die Signale erhalten und nicht der aufgerufene Subprozess (der dann sein eigenes Signalhandling machen kann)
Das wird nicht gehen. Was Du machen musst, ist den TAR vom "controlling terminal" trennen. Ein ^C schickt das SIGINT an alle Prozesse, die das jeweilige Konsolenfenster als controlling Terminal haben. Dafür gibt es den setsid Syscall. Wie ich das in der Bash mache, weiß ich nicht. Das hier geht aber: #!/bin/bash trap 'echo caught' INT echo start perl -MPOSIX=setsid -e 'setsid; exec @ARGV' /bin/sleep 10 echo done Und das hier kommt raus, wenn man während des Sleep ^C drückt. Das Wort "caught" erscheint erst, nachdem das Sleep fertig ist. $ bash ~/xx start ^C^Ccaught done Torsten -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Torsten! On Mo, 14 Dez 2009, Torsten Förtsch wrote:
Das wird nicht gehen. Was Du machen musst, ist den TAR vom "controlling terminal" trennen. Ein ^C schickt das SIGINT an alle Prozesse, die das jeweilige Konsolenfenster als controlling Terminal haben.
Dafür gibt es den setsid Syscall. Wie ich das in der Bash mache, weiß ich nicht.
Oh richtig. Das hab ich gesehen, aber falsch verstanden. Lustigerweise scheint es zu funktionieren, wenn man explizit SIGINT ignoriert: trap '' SIGINT Wie man dann aber explizit eine eigene Routine aufruft, weiß ich nicht. Mit freundlichen Grüßen Christian -- hundred-and-one symptoms of being an internet addict: 15. Your heart races faster and beats irregularly each time you see a new WWW site address in print or on TV, even though you've never had heart problems before. -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Mon, 14 Dez 2009, Torsten Förtsch schrieb:
Dafür gibt es den setsid Syscall. Wie ich das in der Bash mache, weiß ich nicht. Das hier geht aber:
man 1 setsid
#!/bin/bash
trap 'echo caught' INT
echo start perl -MPOSIX=setsid -e 'setsid; exec @ARGV' /bin/sleep 10 echo done
setsid /bin/sleep 10 -dnh -- Only wimps use tape backup: _real_ men just upload their important stuff on ftp, and let the rest of the world mirror it ;) -- Linus Torvalds -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Montag 14 Dezember 2009 17:00:57 schrieb David Haller: Hallo,
man 1 setsid
setsid /bin/sleep 10
Gut zu wissen, das es sowas gibt! Klappt prima! Vielen Dank an alle! MfG Th. Moritz -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (4)
-
Christian Brabandt
-
David Haller
-
Thomas Moritz
-
Torsten Förtsch