Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
18.09.2021, 15:49:06

.
Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
Statistiken
  • Beiträge insgesamt: 754251
  • Themen insgesamt: 60645
  • Heute online: 584
  • Am meisten online: 2287
  • (22.01.2020, 19:20:24)
Benutzer Online

Autor Thema:  bash, PID von Programm ermitteln und verwenden  (Gelesen 298 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

bash, PID von Programm ermitteln und verwenden
« am: 28.06.2021, 10:42:06 »
Ich möchte gerne die PID von Programmen ermitteln und verwenden.

Folgend werde ich:
* das was ich heraus gefunden habe benennen
* und vlt. sieht der eine oder andere ja hierbei Optimierungspotential

PID vom Editor XED, bei dessem Aufruf ermitteln:
* Das geht prinzipiell, bringt aber zwei Ausgaben hintereinander, eine davon mit Fehlermeldung
xed & $!
[1] 16280 # Ausgabe ohne Fehlermeldung
16280: command not found # Ausgabe mit Fehlermeldung

Ausgabe von PID
* geht
echo $!
16280 # Ausgabe

PID einer var zu weisen und per echo ausgeben:
* geht
my_var=$!
echo $my_var

Programm per PID schließen
* geht
kill 16280
Programm starten, PID ermitteln und dann per PID wieder schließen:
* Geht. Jedoch mit Fehlermeldung.
xed & $! # Editor XED starten und PID abfragen
[1] 16280 # Ausgabe von PID
16280: command not found # Fehlermeldung
kill $! # Schließen von XED per PID, funktioniert

Ob ein Programm mit einer bestimmten PID erfolgreich beendet wurde oder noch läuft, kann man wohl wie folgt ab fragen:
* Hier kann ich im Moment noch nicht so recht die darauf folgende Ausgabe interpretieren.
kill -0 $PID # Aufruf
kill: Aufruf: kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname] # Ausgabe
[1]+  Beendet                 xed # Ausgabe
« Letzte Änderung: 28.06.2021, 12:26:51 von John.Miller »

Re: bash, PID von Programm ermitteln und verwenden
« Antwort #1 am: 28.06.2021, 11:39:02 »
xed & xedPid=$!

sleep 3s

kill -15 $xedPid

Kill -0 ist Nonsens, guckst Du:
man 7 signal

Re: bash, PID von Programm ermitteln und verwenden
« Antwort #2 am: 28.06.2021, 12:22:18 »
Da es sowohl ein hartes als auch weiches Schließen gibt, würde ich vermuten das:
* man das Weiche Schließen aus mir nicht bekannten Gründen bevorzugen sollte sollte, es aber nicht immer funktioniert
* das das Harte Schließen, öfter funktioniert, aber ansonsten irgend welche Nachteile gegenüber dem Weichen Schließen hat
* wohl möglich wäre es ideal, wenn man nach einem Versuch eines Weichen Schließens testet, ob dieses erfolgreich war und bei Bedarf ein Hartes Schließen folgen lässt

xed & xedPid=$! # Starten des Editors XED und abfragen seiner PID

sleep 3

kill -15 $xedPid # Soft Kill

sleep 3

kill -9 $xedPid # Hard Kill

Kill -0 ist Nonsens, guckst Du:
Code: [Auswählen]

man 7 signal
Ja, unter "man 7 signal" ist in der Auflistung "Signal numbering for standard signals", kein "SIGNAL -0" benannt.

Aber:
Ob ein Programm mit einer bestimmten PID erfolgreich beendet wurde oder noch läuft, scheint man trotzdem im vorliegenden Fall, wie folgt abfragen zu können.
* Hier kann ich im Moment noch nicht so recht die darauf folgende Ausgabe interpretieren.
xed & xedPid=$! # Starten des Editors XED und abfragen seiner PID
[1] 18742

# Ausgabe wenn das aufgerufene Programm noch läuft
kill -0 $xedPID
kill: Aufruf: kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname]

kill -15 $xedPid

# Ausgabe wenn das aufgerufene Programm nicht mehr läuft:
kill -0 $xedPID
kill: Aufruf: kill [-s Signalname | -n Signalnummer | -Signalname] pid | jobspec ... oder kill -l [Signalname]
[1]+  Beendet                 xed

Nachtrag:
Ob ein Programm läuft oder nicht, lässt sich augenscheinlich auch von folgendem ableiten und wohl möglich auch für ein eventuelles darauf notwendiges Hartes Kill auswerten.
* Eventuell gibt aber ein Weiches Kill bei dessen Ausführung auch bereits irgend wie selbst zu erkennen, ob es erfolgreich ausgeführt werden konnte.
xed & xedPid=$! # Starten des Editors XED und abfragen seiner PID
[1] 18742
kill -15 $xedPid

# folgendes gibt ein Weiches Kill zurück, wenn es aufgerufen wird und kein solcher Prozess (mehr ?) besteht:
kill -15 $xedPid
bash: kill: (18742) - Kein passender Prozess gefunden
[1]+  Beendet                 xed
« Letzte Änderung: 28.06.2021, 17:16:17 von John.Miller »