[gelöst] Prüfen ob eine bestimmte PID läuft (Unix)

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
JD55
Beiträge: 5
Registriert: Fr 29. Mai 2020, 15:41

[gelöst] Prüfen ob eine bestimmte PID läuft (Unix)

Beitrag von JD55 »

Hallo,
und wieder ein Problem. Ich bekomme von einem anderen Programm seine PID mitgeteilt und möchte dann warten bis das Programm zu ende ist. Also die PID abfragen ob sie noch existiert. Leider finde ich keinen Weg wie man es in Freepascal umsetzt.
FpWaitPid liefert immer -1.

Gibt es vielleicht einen anderen ausser das man ps aufruft und darin die PID sucht? Gibt es vielleicht ein Signal welches man per FpKill senden kann? So eine art NOP.

Vielen dank im voraus
Zuletzt geändert von JD55 am Do 4. Jun 2020, 15:31, insgesamt 1-mal geändert.

Socke
Lazarusforum e. V.
Beiträge: 2748
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Prüfen ob eine bestimmte PID läuft (Unix)

Beitrag von Socke »

Handelt es sich bei "einem anderen Programm" und einen Child-Prozess (wird von deinem Programm gestartet) oder wird es unabhängig von deinem Programm gestartet, läuft möglicherweise bereits vorher?

FPWaitPid und FPWait funktionieren nur auf Child-Prozessen siehe https://www.freepascal.org/docs-html/rt ... itpid.html bzw man waitpid. Soweit ich gelesen habe, bietet Linux keine Standard-API dafür an. Es dürfte am einfachsten sein, das Verzeichnis /proc/$pid/ zu oder aber ein 0-Signal zu senden, wie unter https://stackoverflow.com/questions/105 ... -to-finish vorgeschlagen.
man kill (1) hat geschrieben:If signal is 0, then no actual signal is sent, but error checking is still performed.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

JD55
Beiträge: 5
Registriert: Fr 29. Mai 2020, 15:41

Re: Prüfen ob eine bestimmte PID läuft (Unix)

Beitrag von JD55 »

Vielen dank,
trotz intensiver suche habe ich das nicht gefunden. Das mit FpKill(PID,0) klappt wunderbar.

Antworten