Hallo zusammen, in einem Script setze ich ein lock-File, was beim Beenden wieder geloescht wird. Mit trap moechte ich erreichen, dass das lock-File auch verschwindet, wenn das Script mit killall scriptname abgeschossen wird. SIGINT, SIGKILL usw. scheinen in dem Fall nicht zu greifen. kill -l zeigt ja alle Moeglichkeiten, aber welche greift bei killall? Beispiel-Schnipsel: #!/bin/sh lockfile="/dev/shm/myscript.lock" trap "rm -f $lockfile" SIGKILL if test -f "$lockfile"; then echo "Diese Anwendung ist bereits aktiv!" exit fi [...] Da ich das lockfile nach /dev/shm lege, ist es nach einem Neustart ohnehin weg. Fuer diesen Fall brauche ich nichts zu unternehmen. MfG Th. Moritz -- Es ist schon komisch, dass ein Mann, der sich um nichts auf der Welt Sorgen machen muss, hingeht und eine Frau heiratet… (Eminem) -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo Thomas,
in einem Script setze ich ein lock-File, was beim Beenden wieder geloescht wird. Mit trap moechte ich erreichen, dass das lock-File auch verschwindet, wenn das Script mit killall scriptname abgeschossen wird. SIGINT, SIGKILL usw. scheinen in dem Fall nicht zu greifen. kill -l zeigt ja alle Moeglichkeiten, aber welche greift bei killall?
Schau mal hier: http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammierung#Fallenste... Und hier alle Signale: http://linux.die.net/man/7/signal Google sei dank. :-)
Beispiel-Schnipsel:
#!/bin/sh
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
if test -f "$lockfile"; then echo "Diese Anwendung ist bereits aktiv!" exit fi [...]
Da ich das lockfile nach /dev/shm lege, ist es nach einem Neustart ohnehin weg. Fuer diesen Fall brauche ich nichts zu unternehmen.
-- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Samstag, 6. März 2010 16:52:54 schrieb Sebastian Siebert: Hallo Sebastian,
in einem Script setze ich ein lock-File, was beim Beenden wieder geloescht wird. Mit trap moechte ich erreichen, dass das lock-File auch verschwindet, wenn das Script mit killall scriptname abgeschossen wird. SIGINT, SIGKILL usw. scheinen in dem Fall nicht zu greifen. kill -l zeigt ja alle Moeglichkeiten, aber welche greift bei killall?
Schau mal hier: <http://de.wikibooks.org/wiki/Linux-Kompendium:_Shellprogrammieru ng#Fallensteller:_Auf_Traps_reagieren>
Und hier alle Signale: http://linux.die.net/man/7/signal
Google sei dank. :-)
Danke! Hier werden die Sig's etwas ausfuehrlicher dokumentiert als bei kill -l
Beispiel-Schnipsel:
#!/bin/sh
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Ich wuerde sagen, die bash akzeptiert die 9 und das SIGKILL. Zumindest klappt das mit SIGINT und Ctrl-C. Das Script kann ich mit kill -9 <pid> killen, aber trap reagiert nicht auf 9 und nicht auf SIGKILL! Der Hund liegt irgendwo anders begraben. Ich werde nachher mal _ohne_ Variable testen und das lock-File direkt angeben. trap "rm -f /dev/shm/myscript.lock" SIGKILL MfG Th. Moritz -- Es gibt nur eines, was teurer ist als eine Frau, nämlich eine Ex-Frau… (Jack Nicholson) -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo Thomas,
Danke! Hier werden die Sig's etwas ausfuehrlicher dokumentiert als bei kill -l
Beispiel-Schnipsel:
#!/bin/sh
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Ich wuerde sagen, die bash akzeptiert die 9 und das SIGKILL. Zumindest klappt das mit SIGINT und Ctrl-C. Das Script kann ich mit kill -9 <pid> killen, aber trap reagiert nicht auf 9 und nicht auf SIGKILL! Der Hund liegt irgendwo anders begraben. Ich werde nachher mal _ohne_ Variable testen und das lock-File direkt angeben.
trap "rm -f /dev/shm/myscript.lock" SIGKILL
In der Manpage zu signal steht folgender wichtiger Satz: "The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored." Man steht mit dem SIGKILL in C/C++ vor dem gleichen Problem und kann eben nicht abgefangen werden. Daher sollten man das SIGKILL immer im äußersten Notfall anwenden, wenn die Anwendung echt überhaupt nicht mehr reagiert. Daher ist ein SIGTERM (15) vorzuziehen: # kill -15 programm Somit gibst du dem Programm/Skript die Möglichkeit doch noch sauber zu beenden. Soweit alles klar? Sorry, das Beispiel von mir mit # trap "..." 9 kannst du verbrennen. -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Samstag, 6. März 2010 19:37:59 schrieb Sebastian Siebert: Hallo Sebastian,
In der Manpage zu signal steht folgender wichtiger Satz: "The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored."
Man steht mit dem SIGKILL in C/C++ vor dem gleichen Problem und kann eben nicht abgefangen werden. Daher sollten man das SIGKILL immer im äußersten Notfall anwenden, wenn die Anwendung echt überhaupt nicht mehr reagiert.
Daher ist ein SIGTERM (15) vorzuziehen: # kill -15 programm
Das "eigentliche" Script laeuft im Hintergrund. Ein User auf der Kiste (icewm ohne Icons und ohne Menuleiste) hat also keine Moeglichkeit per Ctrl-C zu beenden. Die Moeglichkeit mit dem trap das lock-File zu loeschen waere auch nur im Testmodus angenehm. Damit muss ich nun selbst klarkommen :-) Es ist zwar kein Problem ein File zu loeschen, aber spaeter mal wieder daran zu denken... und das im Alter :-) MfG Th. Moritz -- Frauen arbeiten heutzutage als Jockeys, stehen Firmen vor und forschen in der Atomphysik. Warum sollten sie nicht irgendwann auch rueckwärts einparken koennen… (Bill Vaughan) -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Samstag, 6. März 2010 16:52:54 schrieb Sebastian Siebert: Hallo Sebastian, hier ein Beispiel: #!/bin/sh #trap "rm -f /dev/shm/traptest.lock" SIGKILL trap "echo SIGINT bekommen" SIGINT trap "echo SIGKILL bekommen" SIGKILL touch /dev/shm/traptest.lock while true; do ls /dev/shm sleep 1 done Entweder habe ich einen Knoten im Hirn, oder mein Vorhaben scheitert ganz woanders :-( Den obigen Schnipsel kannst Du mit Ctrl-C versorgen, _dann_ kommt das echo! Bei kill -9 <pid> oder killall <Scriptname> wird lediglich das Script beerdigt! Der trap scheint beim kill nicht zu fruchten. Und nun? Hier ist genau wieder mein urspruengliches Problem. MfG Th. Moritz -- Elektronik funktioniert mit Rauch. Ist er aus dem Gerät raus, gehts nicht mehr! -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Bitte die touch-Zeile auskommentieren! Sorry! #touch /dev/shm/traptest.lock MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Sam, 06 Mär 2010, Thomas Moritz schrieb:
Am Samstag, 6. März 2010 16:52:54 schrieb Sebastian Siebert: #!/bin/sh
#trap "rm -f /dev/shm/traptest.lock" SIGKILL trap "echo SIGINT bekommen" SIGINT trap "echo SIGKILL bekommen" SIGKILL [..] Entweder habe ich einen Knoten im Hirn, oder mein Vorhaben scheitert ganz woanders :-( Den obigen Schnipsel kannst Du mit Ctrl-C versorgen, _dann_ kommt das echo!
Ctrl-c schickt ein SIGINT
Bei kill -9 <pid> oder killall <Scriptname> wird lediglich das Script beerdigt! Der trap scheint beim kill nicht zu fruchten.
SIGKILL _kann_ man nicht abfangen. Und kill ohne SIGSPEC (killall macht das gleiche) schickt ein SIGTERM und kein SIGINT. Und TERM fängst du nicht ab.
Und nun? Hier ist genau wieder mein urspruengliches Problem.
Siehe meine erste Mail ;) -dnh -- "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." -- Rich Cook -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Sam, 06 Mär 2010, Sebastian Siebert schrieb: [..]
Warum in der Ferne schweifen, wo 'man 7 signal' so nah? [..]
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
Nicht portabel.
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Das bekommt man aber nicht per 'killall script'. UND ES KANN EH NICHT ABGEFANGEN WERDEN! trap "rm -f '$lockfile'" EXIT TERM INT HUP "EXIT" ist das gesuchte, das gibt's beim regulären Beenden (z.B. durch 'exit 0' im script, oder auch wenn das Script per kill/killall mit SIGTERM (15) beendet wird. -dnh -- If Windows is the solution, can we please have the problem back? -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo
[..]
Warum in der Ferne schweifen, wo 'man 7 signal' so nah?
Kann man auch... :-)
[..]
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
Nicht portabel.
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Das bekommt man aber nicht per 'killall script'. UND ES KANN EH NICHT ABGEFANGEN WERDEN!
Dazu habe ich bereits was geschrieben unter http://lists.opensuse.org/opensuse-programming-de/2010-03/msg00011.html
trap "rm -f '$lockfile'" EXIT TERM INT HUP
"EXIT" ist das gesuchte, das gibt's beim regulären Beenden (z.B. durch 'exit 0' im script, oder auch wenn das Script per kill/killall mit SIGTERM (15) beendet wird.
Siehe Link zum Thread. -- Gruß Sebastian - openSUSE Member (Freespacer) http://de.opensuse.org/Benutzer:Freespacer Wichtiger Hinweis zur openSUSE Mailing Liste: http://de.opensuse.org/OpenSUSE_mailing_list_netiquette -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Am Samstag, 6. März 2010 20:14:31 schrieb David Haller: Hallo David,
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
Nicht portabel.
Nicht moeglich!
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Das bekommt man aber nicht per 'killall script'. UND ES KANN EH NICHT ABGEFANGEN WERDEN!
s.o.
trap "rm -f '$lockfile'" EXIT TERM INT HUP
"EXIT" ist das gesuchte, das gibt's beim regulären Beenden (z.B. durch 'exit 0' im script, oder auch wenn das Script per kill/killall mit SIGTERM (15) beendet wird.
Man - David, warum musst Du immer so lange pennen? Jetzt kann ich meine Aenderungen alle wieder zurueckschreiben und doch die lock-Files beibehalten :-) MfG Th. Moritz -- Jeder will alt werden, doch keiner will alt sein. -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo, Am Sam, 06 Mär 2010, Thomas Moritz schrieb:
Am Samstag, 6. März 2010 20:14:31 schrieb David Haller: Hallo David,
lockfile="/dev/shm/myscript.lock"
trap "rm -f $lockfile" SIGKILL
Nicht portabel.
Nicht moeglich!
Das bezog sich auf die Verwendung der "SIG" Prefix bei angabe der
Signale, die das 'trap' abfangen soll.
http://www.opengroup.org/onlinepubs/7990989775/xcu/chap2.html#tag_001_014_01...
====
The condition can be EXIT, 0 (equivalent to EXIT) or a signal
specified using a symbolic name, without the SIG prefix, as listed in
^^^^^^^^^^^^^^^^^^^^^^
the tables of signal names in the XSH specification under
# es hätte wie folgt lauten müssen (9 = SIGKILL): trap "rm -f $lockfile" 9
Das bekommt man aber nicht per 'killall script'. UND ES KANN EH NICHT ABGEFANGEN WERDEN!
s.o.
s.o. Erst hier geh ich auf's "KILL" ein ;)
trap "rm -f '$lockfile'" EXIT TERM INT HUP
"EXIT" ist das gesuchte, das gibt's beim regulären Beenden (z.B. durch 'exit 0' im script, oder auch wenn das Script per kill/killall mit SIGTERM (15) beendet wird.
Man - David, warum musst Du immer so lange pennen? Jetzt kann ich meine Aenderungen alle wieder zurueckschreiben und doch die lock-Files beibehalten :-)
Tja nu. Du hättest auch in man bash nach der Doku zu 'trap' suchen können. ;) ==== man bash ==== SHELL BUILTIN COMMANDS [..] trap [-lp] [arg] [sigspec ...] [..] signal number. If a sigspec is EXIT (0) the com mand arg is executed on exit from the shell. ==== Und da sich bei SIGTERM (15) das Script regulär beendet wird AFAIK auch ein trap auf EXIT ausgeführt. -dnh -- "Gott wollte angeben, als er dich erschaffen hat." -- "Jake" zu "Anna" in "Glauben ist alles" -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo zusammen, auf der Seite http://www.wachtler.de/skript_tools/node56.html fand ich, dass ein Kill-Signal nicht per trap abgefangen werden kann. Damit hat sich meine Anfrage wohl erledigt. MfG Th. Moritz -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
participants (3)
-
David Haller
-
Sebastian Siebert
-
Thomas Moritz