ubuntuusers.de

Wie wird ein bestimmter Prozess beendet?

Status: Ungelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

Fried-rich

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Hallo,

gibt es eine Möglichkeit herauszubekommen wie genau ein Prozess beendet wird? Konkret habe ich mir über die letzten 2 Jahre einige Scripte zusammengebastelt zur Konvertierung von Audio- und Videodateien. Da werden diverse Sachen abgeprüft und alles landet in einer Batchliste. Die sind alle extrem uneinheitlich, da ich in der Zeit gelernt habe wie man Sachen in Shellscripten umsetzt. Daher poste ich die auch nicht. In allen wir ein Panel-Icon mit yad geöffnet in dem ich solange das Script noch läuft einstelle ob nachdem das Script fertig ist der Rechner heruntergefahren werden soll oder nicht. Das Panel wird dann am Ende der Konvertierungscripte beendet mit 'kill' und ggf. ein Shutdown ausgeführt.

Problem: Nehme ich 'kill' raus, wird das Panel dennoch beendet und ich verstehe nicht warum. Ich hab da nichts eingebaut, dass genau das passieren sollte.

Wird irgendwo geloggt wie das Panel beendet wird? 'kil' sucht lezztlich nur nach einem bestimmten Prozessnamen:

kill $(pgrep -f Audio-Shutdown-Panel-Icon)

Fried-rich

Moderiert von ChickenLipsRfun2eat:

In passenderes Forum verschoben.

alterpinguin

Anmeldungsdatum:
24. Mai 2014

Beiträge: 786

wenn Du so was nicht postest, dann bleibt das natürlich beim Raten.

Eigentlich gibt jedes Programm beim Beenden einen Status zurück. Z.B. in shell-Scripten lässt sich der Abfragen mit "$?". Wenn Du mehr mit Scripten machen willst, dann empfehle ich den "abs-guide" (der kommt mit jeder Menge Beispielen zu allen möglichen Anwendungsfällen).

Die meisten Programme haben keine eingebaute Option um z.B. in einer log-Datei zu protokollieren wie sie beendet werden. D.h. da muss schon das aufrufende Programm dafür sorgen, dass es den Programm-Ende-Status zur Kenntnis nimmt.

.. und ich weiß nicht ob so eine Frage mehr in den Bereich "Programmierung" hier im Forum gehört...

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Ich glaube ich das einen Verdacht. Ich lasse Kontextmenüs in Thunar in LXTerminal (das hab ich extra dafür installiert um einen optischen Untershcied zum normalen Xfce-Terminla zu haben) ausführen:

lxterminal -e /pfad/zum/script %F

Das Panel-Icon wird nur beendet, wenn ich das Kontextmenü über Thunar ausführe, nicht aber wenn ich das Skript direkt starte. Kann es sein, dass hier ALLES das über das Script ausgeführt wird als Kindprozess des LXTerminal-Prozesses gilt und wenn der LXTerminal-Prozess beendet wird auch die Kindprozesse beendet werden? Wenn dem so ist, wie müsste ich dann das Panel starten, dass es auch weiterläuft nachdem LXTerminal beendet wurde? Bisher starte ich es einfach mit

/pfad/zum/script script.sh

Ein & dahinter einfügen ändert leider nichts.

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6509

Wohnort: Hamburg

Problem: Nehme ich 'kill' raus, wird das Panel dennoch beendet und ich verstehe nicht warum. Ich hab da nichts eingebaut, dass genau das passieren sollte.

Ich denke, das ist das normale Verhalten. Ich benutze in meinen eigenen Programmen übrigens einen ähnlichen Mechanismus. Allerdings benutze ich da meistens xterm:

xterm -e sipic.sh %F

Bei xterm gibt es allerdings noch die Option "-hold", die ich bei anderen Terminals, z.B. MATE-Terminal nicht gfunden habe:

       -hold   Turn on the hold resource, i.e., xterm will not immediately
               destroy its window when the shell command completes.  It will
               wait until you use the window manager to destroy/kill the
               window, or if you use the menu entries that send a signal,
               e.g., HUP or KILL.

       +hold   Turn off the hold resource, i.e., xterm will immediately
               destroy its window when the shell command completes.

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Früher unter Kubuntu hab ich das Xfce-Terminal dafür genutzt, das kennt 'hold' auch. LXTerminal nicht. XTerm geht aber leider auch optisch auch Richtung Augenkrebs. Ich teste das mal.

schollsky

Anmeldungsdatum:
3. Dezember 2012

Beiträge: 1730

Wohnort: Ruhrgebeat

Hallo Fried-rich,

ggf. hilft Dir der Befehl "nohup" (→ No Hangup).

Viele Grüße

schollsky

Fried-rich

(Themenstarter)

Anmeldungsdatum:
2. Mai 2013

Beiträge: 1162

Die Idee mit nohup hatte ich auch schon und ich werde es wohl auch so umsetzen müssen, da es leider auch mit xterm -hold -e so nicht geht. Passiert das gleiche wie wenn ich lxterminal nehme.

alterpinguin

Anmeldungsdatum:
24. Mai 2014

Beiträge: 786

Fried-rich schrieb:

Die Idee mit nohup hatte ich auch schon und ich werde es wohl auch so umsetzen müssen, da es leider auch mit xterm -hold -e so nicht geht. Passiert das gleiche wie wenn ich lxterminal nehme.

dass das passiert ist aber vollkommen normal und auch sinnvoll. Vielleicht solltest Du doch etwas mehr Grundlagen überfliegen um das wahr zu nehmen. Alle Programme, die mit dem aufrufenden Programm verbunden sind, sollten nicht weiterlaufen, wenn das aufrufende Programm beendet wird. Soll ein aufgerufenes Programm ohne Rücksicht weiterlaufen, dann muss es auch die Verbindungen aufgeben (und sozusagem zum "daemon" werden - ein Programm, das unabhängig läuft und direkt "angesprochen" werden muss, wenn es z.B. beendet werden soll).

Antworten |