Prozess Liste

Antworten
jscnetcore
Beiträge: 19
Registriert: Mi 31. Jul 2013, 11:34
OS, Lazarus, FPC: Debian Squeeze Linux (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Prozess Liste

Beitrag von jscnetcore »

Guten Tag zusammen,

nach langer Zeit habe ich mir jetzt Zeit genommen meine Programme auf 64Bit umzustellen.
In den vorhanden 32Bit Programmen wurde noch "sigqueue" aus der "libc" verwendet um für eine bekannte PID den Status abzufragen, aktiv oder beendet.
Das stammt noch aus Kylix Zeiten;-)

Code: Alles auswählen

If (sigqueue(LastPID, 0, sig) = 0) Then Begin usw.

Ich habe jetzt schon eine gefühlte Ewigkeit im Netz gesucht und nichts passendes für LINUX gefunden.

Kann mir jemand einen Tip geben welcher Lazarus Befehl hier helfen kann?

Vielen Dank und viele Grüße

Josch

Warf
Beiträge: 1907
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Prozess Liste

Beitrag von Warf »

Einfach selbst gegenlinken:

Code: Alles auswählen

uses BaseUnix;
 
function sigqueue(pid: pid_t, sig: cint, const value: IntPtr): cint; cdecl; external 'libc';


Aber ma so ne ganz dumme Frage, gibt es da keine bessere Möglichkeit, z.b. Waitpid?

jscnetcore
Beiträge: 19
Registriert: Mi 31. Jul 2013, 11:34
OS, Lazarus, FPC: Debian Squeeze Linux (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: Prozess Liste

Beitrag von jscnetcore »

Servus,

zuerst einmal vielen Dank für die schnelle Reaktion!

Ich weiß nicht ob fpWaitPID hier der richtige Ansatz ist.

Gemacht wird folgendes. Eine Anwendung wird beim Beenden nicht wirklich beendet, sondern nur die Sichtbaren Komponenten ausgeblendet.
Als Anwender sieht es so aus als wäre das Programm beendet.
Wenn man das Programm dann erneut startet soll der alte Prozess die Arbeit wieder übernehmen. Der Hintergrund ist, daß das Programm Datenbankverbindungen
aufbaut, was teilweise länger dauern kann. Gerade dann wenn es remote via Internet Verbindungen aufbaut ist das sehr hinderlich.
Um es noch komplizierter zu machen;-) Das Programm kann mehrfach laufen aber mit Verbindungen zu unterschiedlichen Datenbanken.
Über Konfigdateien, die beim Start des Programms geschrieben werden wird die PID und die dazugehörigen Datenbankverbindungen gespeichert.
Und diese gespeicherte PID soll abgefragt werden, aktiv oder nicht.

Bei fpWaitPID wird immer von Child Prozessen gesprochen. Das trifft ja hier nicht zu?!

Gruß Josch

Warf
Beiträge: 1907
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Prozess Liste

Beitrag von Warf »

jscnetcore hat geschrieben:Bei fpWaitPID wird immer von Child Prozessen gesprochen. Das trifft ja hier nicht zu?!

Gruß Josch


Stimmt, wenn es kein Child ist dürfte WaitPID nicht funktionieren. Dann könntest du kill (bzw. fpkill) verwenden:
man kill(2) hat geschrieben: If sig is 0, then no signal is sent, but existence and permission
checks are still performed; this can be used to check for the
existence of a process ID or process group ID that the caller is
permitted to signal.


Kommt also praktisch auf das selbe raus wie du es machst, nur das fpkill bereits in BaseUnix exsistiert.

Du solltest aber nicht nur schauen was rauskommt, sondern wenn du einen Fehler bekommst solltest du auch noch schauen ob der Prozess wirklich gekillt wurde oder nicht was anderes passiert ist (z.B. keine Berechtigung)

jscnetcore
Beiträge: 19
Registriert: Mi 31. Jul 2013, 11:34
OS, Lazarus, FPC: Debian Squeeze Linux (L 1.0.8 FPC 2.6.2)
CPU-Target: 32Bit

Re: Prozess Liste

Beitrag von jscnetcore »

Guten Morgen Warf,

entschuldige die späte Reaktion. Ich werde das mit fpkill einmal ausprobieren und mich dann nochmal dazu melden.
Danke für Deinen Hinweis.

Viele Grüße

Josch

Antworten