Hilfe für Kill -15 Script gesucht

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
clue
Beiträge: 943
Registriert: 08.07.2007 17:36:57

Hilfe für Kill -15 Script gesucht

Beitrag von clue » 21.02.2013 18:50:45

Hi!

Ich habe mein Home in einem Luks Container. Er wird automatisch beim Systemstart mounted und nachher wieder unmounted. Manchmal hängen aber noch Prozesse auf dem /home Verzeichnis. Ich beende sie mit

Code: Alles auswählen

kill -15 $(lsof -t /dev/mapper/home)
und hartnäckige mit -9.

Meine Fragen:

1) Wie kann ich meinem Script sagen, es möge doch erst warten ob die -15er Aktion Erfolg hatte und erst im Misserfolgsfall -9 machen?
2) Wie kann ich dem Skript sagen, es solle erst warten, bis -9 erfolgreich beendet ist und dann erst weitermachen?
Offenbarung 13 erfüllt sich gerade vor unseren Augen, genießen wir also die letzten Jahre unserer Scheinfreiheit

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 21.02.2013 19:56:35

Mit wait.

Code: Alles auswählen

pids="$(lsof -t /dev/mapper/home)"
kill -15 $pids
timeout 10 wait $pids
Aber 1. kann ich mir nicht so viele Prozesse vorstellen, die direkt auf das Device zugreifen, 2. hast du ein anderes Problem, wenn das so nötig ist. Was für Prozesse hängen da denn?

clue
Beiträge: 943
Registriert: 08.07.2007 17:36:57

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von clue » 22.02.2013 11:31:36

EDIT

Ups, sry. Hab meine Antwort unten nochmal generalüberholt.
Zuletzt geändert von clue am 22.02.2013 12:19:52, insgesamt 2-mal geändert.
Offenbarung 13 erfüllt sich gerade vor unseren Augen, genießen wir also die letzten Jahre unserer Scheinfreiheit

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 22.02.2013 12:08:56

clue hat geschrieben:
Natureshadow hat geschrieben:Mit wait.

Code: Alles auswählen

pids="$(lsof -t /dev/mapper/home)"
kill -15 $pids
timeout 10 wait $pids
Cool, Danke! Werds sofort ausprobieren. Aber sach mal: Wenn -15 nicht funktioniert, wie kann ich dem Skript dann sagen, es soll das gleiche mit -9 machen? Erfahrungsgemäß ist in meinen Fällen eh nur mit -9 dem Problem beizukommen (s.u.)
Naja nochmal genau so, nur mit -9?

Poste bitte mal genau was da hängt und wann. Glauben hilft nicht, wir sind hier nicht in der Kirche.

-nik

clue
Beiträge: 943
Registriert: 08.07.2007 17:36:57

Re: Hilfe für Kill -15 Script gesucht

Beitrag von clue » 22.02.2013 12:27:41

:oops: Während Du schon geantwortet hast, hab ich noch meine Antwort oben editiert. Also hier nochmal die bessere Fassung:

Jetzt folgt eine ziemlich lange Antwort mit vielen Unterpunkten. Bitte nicht böse sein, ok?
Natureshadow hat geschrieben:Mit wait.

Code: Alles auswählen

pids="$(lsof -t /dev/mapper/home)"
kill -15 $pids
timeout 10 wait $pids
Cool, Danke! Dein Skript habe ich fix ausprobiert. Das Problem ist momentan, dass mein System wait nicht findet.

Code: Alles auswählen

Man wait: No manual entry for wait
Welches Paket fehlt mir? Weder Google noch Synaptic spucken etwas brauchbares aus.
Natureshadow hat geschrieben:Poste bitte mal genau was da hängt und wann. Glauben hilft nicht, wir sind hier nicht in der Kirche.
Da liegt ja mein anderes Problem: Ich kann das nicht so ohne weiteres sagen, weil es ja nur kurz beim Runterfahren angezeigt wird. Es hängt wohl mit Synaptic über KDESUDO zusammen. Wenn ich es einmal aufgerufen habe, beenden sich nachher die Prozesse beim Runterfahren nicht. Hab auch schon nen Käfer-Report geschrieben (vor Jahr und Tag). Passiert bei mir auf 3 verschiedenen Systemen. Interessiert nur niemanden.
Um den Maintainern zu helfen, möchte ich Ihnen genau sagen können, welche Prozesse das sind. Dazu müsste ich sie beim Runterfahren auch vernünftig angezeigt bekommen. Als Idee habe ich Folgendes gefunden: http://www.lehman.cuny.edu/cgi-bin/man-cgi?wait+1

Code: Alles auswählen

pid=$!
       kill -kill $pid
       wait $pid
       echo $pid was terminated by a SIG$(kill -l  $(($?-128))) signal.
Was diesem Skript fehlt sind 3 Sachen:
1. Erst sollte gewartet werden, ob es mit -15 klappt.
2. Falls es nicht klappt, dann erst mit -9
3. Die Schuldigen sollten aufgelistet werden, und das System warten, bis ich eine Taste zum Weitermachen drücke. Damit kann ich die Schuldigen dann in aller Ruhe aufschreiben.

Ich weiß, ganz schön viel Kram auf einmal. Aber wenn mir jemand dabei helfen könnte, wäre ich dankbar. :hail:
Offenbarung 13 erfüllt sich gerade vor unseren Augen, genießen wir also die letzten Jahre unserer Scheinfreiheit

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 22.02.2013 12:45:30

clue hat geschrieben:Cool, Danke! Dein Skript habe ich fix ausprobiert. Das Problem ist momentan, dass mein System wait nicht findet.

Code: Alles auswählen

Man wait: No manual entry for wait
Welches Paket fehlt mir? Weder Google noch Synaptic spucken etwas brauchbares aus.
Es ist ein Shell-Builtin. Welche Shell benutzt du?
clue hat geschrieben:
Natureshadow hat geschrieben:Poste bitte mal genau was da hängt und wann. Glauben hilft nicht, wir sind hier nicht in der Kirche.
Da liegt ja mein anderes Problem: Ich kann das nicht so ohne weiteres sagen, weil es ja nur kurz beim Runterfahren angezeigt wird.
init selber macht mit einem Skript ganz am Ende genau das, was du da vor hast. Wenn du es trotzdem selber implementieren willst, habe ich dir dafür ja eine Lösung genannt. Außerdem ist es immer noch falsch, das dm-Device zu betrachten. Da greifen keine Userland-Prozesse drauf zu.

Stell den Shutdown-Prozess doch einmal nach. Wechsle aufs tty1 und mache als root ein init 1. Danach machst du lsof auf /home - nicht auf das Device.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Hilfe für Kill -15 Script gesucht

Beitrag von Cae » 22.02.2013 13:13:10

Code: Alles auswählen

$ timeout 10 wait sleep 15 
timeout: failed to run command `wait': No such file or directory
$ sleep 5 &
$ wait
[1] + Done                       sleep 5
$ 
Kann ich bestaetigen. timeout(1) ist ein externes Programm und kann daher nicht auf wait zugreifen, welches ein Shell-Built-in ist (siehe sh(1)).

Des weiteren schliesse ich mich der Idee an, dass niemand auf dem Device selbst herumfummelt, sondern am zugehoerigen Mountpunkt.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 22.02.2013 13:18:37

Na dann nimmt man wait aus busybox :P

Nein, alles Mist. Dann mit while, sleep und pgrep.

Aber wie gesagt, die Idee ist Quark.

clue
Beiträge: 943
Registriert: 08.07.2007 17:36:57

Re: Hilfe für Kill -15 Script gesucht

Beitrag von clue » 22.02.2013 15:00:59

1) Ok, ich hab jetzt die Schuldigen gefunden
  • COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    kdesud 1948 clue cwd DIR 254,1 4096 293761 /home/clue
    kdesud 1948 clue 1w REG 254,1 53948 293816 /home/clue/.xsession-errors (deleted)
    kdesud 1948 clue 2w REG 254,1 53948 293816 /home/clue/.xsession-errors (deleted)
Diese lassen sich nur mit kill -9 beenden. (deleted) steht da, weil ich mich zwischenzeitlich nochmal aus und wieder eingeloggt habe. Nach dem 1. Ausloggen stehts wie oben dar, nur ohne das (deleted). Es wird erst beim Wieder-einloggen drangehängt.

Wo kommen die aufgelisteten Prozesse her? Vom Aufruf von Synaptic mittels Click auf das Icon in KDE. Allerdings ist es nicht immer 100% reproduzierbar. Ich muss noch ein bisschen rumprobieren um es genau sagen zu können, wie es immer reproduzierbar ist (anderer Thread?).

2) Gemäß Eurer Empfehlung habe ich mein Skript jetzt von /dev/mapper/home auf /home umgestellt.

3) echo $SHELL ergibt bei mir /bin/bash

4) Da ich wirklich super wenig Ahnung von Skripten und Co. habe, wie müsste denn nun ein funktionierender 3-Zeiler lauten mit meinen gewünschten 3 Features (erst warten auf kill -15, dann erst -9 und außerdem noch Anzeigen der SchuldigenListe mit Warten auf Bestätigung von mir?
Momentan sieht mein Skript an dieser Stelle so aus

Code: Alles auswählen

pids="$(lsof -t /home)"
kill -15 $pids
timeout 10 wait $pids
umount /home
cryptsetup luksClose /dev/mapper/home
losetup -d /dev/loop0
Wie gesagt, das wait klappt nicht.

EDIT
Hab n Foto von der Fehlermeldung gemacht und alles abgetippt:
  • kill: 18: Usage: Kill [-s sigspec | -signum | -sigspec] [pid | job]... or
    kill -l [exitstatus]
    timeout: failed to run command `wait': No such file or directory
Offenbarung 13 erfüllt sich gerade vor unseren Augen, genießen wir also die letzten Jahre unserer Scheinfreiheit

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Hilfe für Kill -15 Script gesucht

Beitrag von Cae » 22.02.2013 15:10:48

Das ist ja wohl kdesudo, welches die (neu ueberschriebene) Datei offen haelt. Wenn du den Rechner startest, dich einloggst, aber keinerlei administrative Taetigkeiten unternimmst und anschliessend den umount ausloest, was passiert dann?

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 22.02.2013 15:36:08

Auf jeden Fall ist es harmlos. Der Shutdown-Prozess kümmert sich um alles. Lass das mit dem Skript, benutze einfach kein Synaptic und debugge, wenn dir akademisch danach ist, warum kdesu das tut.

clue
Beiträge: 943
Registriert: 08.07.2007 17:36:57

Re: Hilfe für Kill -15 Script gesucht

Beitrag von clue » 23.02.2013 12:26:56

Cae hat geschrieben:Das ist ja wohl kdesudo, welches die (neu ueberschriebene) Datei offen haelt. Wenn du den Rechner startest, dich einloggst, aber keinerlei administrative Taetigkeiten unternimmst und anschliessend den umount ausloest, was passiert dann?

Gruss Cae
Jup, es ist kdesudo. Wenn ich nichts administratives unternehme, habe ich auch keinerlei Problem. Und ja, es ist harmlos. Aber dennoch möchte ich gerne administrativ tätig sein können, ohne jedes mal befürchten zu müssen, mein home in einem unsauberen Zustand runterfahren zu lassen.

Also, liebe, gute und auch großzügig helfende Skript Gurus: Wie soll denn nun mein Dreizeiler-Skript aussehen? So wie Natureshadows' bloß eben irgendwie mit while oder so? Ich bin echt zu blöd das richtig selbst zu schreiben. :?
Offenbarung 13 erfüllt sich gerade vor unseren Augen, genießen wir also die letzten Jahre unserer Scheinfreiheit

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: Hilfe für Kill -15 Script gesucht

Beitrag von Natureshadow » 23.02.2013 13:53:08

Nein. Gar kein Skript. Es *gibt* schon ein Skript, das genau das macht. Das ist Standard in jedem init!

-nik

Antworten