Ich bin neu hier im Forum und programmiere erst seit 2 Tagen mit Lazarus unter Linux. Davor habe ich immer Delphi in Windows genutzt.
Momentan scheitere ich an einem Versuch mehrere Terminals als TProcess zu starten bzw. das Starten ist nicht das Problem, eher die Rückmeldung wenn sie beendet werden.
Aufgebaut ist mein Programm so: Der User kann aus einer Verbindungsliste verschiedene SSH Server auswählen und sich mit diesen verbinden. Dies muss parallel geschehen können, also ist poWaitOnExit leider keine Option

Mein Erster Versuch bestand also darin ein Array aus TProcess zu erstellen. So weit so gut, nur
kann ich so das beenden nicht kontrollieren. Wenn der User ein Terminal schließt und beendet funktioniert alles wunderbar. Öffnet er jedoch mehrere hintereinander und beendet dann eines, verbleiben entweder Zombies, oder ich bekomme sofort die Rückmeldung, dass der zuerst geöffnete Process geschlossen wurde, obwohl dieser noch läuft. Es ist zum verzweifeln!
Ich kann leider den original Code nicht posten.
Nachstellen und Testen kann man das ganze jedoch mit meinem Test-Source:
Code: Alles auswählen
var
TP: array[0..100] of TProcess;
i: integer;
procedure TForm1.Button1Click(Sender: TObject);
begin
i:=i+1;
TP[i]:=TProcess.Create(nil);
TP[i].CommandLine:='ping 8.8.8.8';
TP[i].Options:=TP[i].Options+[poNewConsole];
TP[i].Execute;
Memo1.Lines.Add('Created New PID: '+IntToStr(TP[i].ProcessID));
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var x: integer;
begin
for x:=1 to i do
if TP[x].Active=False then begin {Active und Running macht hier keinen Unterschied!}
Memo1.Lines.Values[IntToStr(TP[x].ProcessID)]:='closed';
end;
end;