Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   FreePascal (https://www.delphipraxis.net/74-freepascal/)
-   -   FreePascal [GNU/Linux] Prozess starten (https://www.delphipraxis.net/157098-%5Bgnu-linux%5D-prozess-starten.html)

implementation 29. Dez 2010 14:53

[GNU/Linux] Prozess starten
 
Ich bin dabei, auf GNU/Linux mittels Free Pascal ein Programm zu schreiben.

Nun möchte ich hieraus ein anderes Programm aufrufen.

Unter Windows würde ich ShellExecute nutzen; für unixoide Systeme habe ich bisher nur die exec()-Funktionen gefunden,
die's in FreePascal bzw. der Unit "Unix" scheinbar nicht gibt.

Kann mir da jemand weiterhelfen?

Klaus01 29. Dez 2010 14:58

AW: [GNU/Linux] Prozess starten
 
fork

Nachtrag:
Execl Execute process (using argument list)

Execle Execute process (using argument list, environment)

Execlp Execute process (using argument list, environment; search path)

Execv Execute process

Execve Execute process using environment

Execvp Execute process, search path

Grüße
Klaus

implementation 29. Dez 2010 15:02

AW: [GNU/Linux] Prozess starten
 
Fork() erstellt eine Kopie des Elternprozesses.

Angenommen ich habe mein Programm 'wuppdi' und rufe darin fork() auf - dann wird 'wuppdi' erneut gestartet.
Ich möchte jedoch ein anderes Programm starten (nämlich 'fpc').

Daher hilft mir fork() leider nicht weiter.
Danke trotzdem!

Klaus01 29. Dez 2010 15:06

AW: [GNU/Linux] Prozess starten
 
dann gäbe es noch shell

Grüße
Klaus

implementation 29. Dez 2010 15:20

AW: [GNU/Linux] Prozess starten
 
Danke, das ist genau das, was ich suche!

JamesTKirk 29. Dez 2010 18:18

AW: [GNU/Linux] Prozess starten
 
Hi!

Vielleicht solltest du mal einen Blick auf die Klasse TProcess in der Unit process werfen. Diese erlaubt es dir Prozesse zu starten, Ein-/Ausgabe umzuleiten und den Exitcode eines Prozesses zu ermitteln.

Die Doku zu dem Thema findest du hier und im Free Pascal Wiki gibt es auch noch nen Artikel dazu.

Bzgl "fork":
In Unix sieht das Starten eines Prozesses normalerweise so aus:
Der Elternprozess ruft "fork" auf, welches einen Klon des Elterprozesses als Kind erzeugt. Der Kindprozess ruft nun "exec" auf, welches das Anwendungsabbild, welches vom Elternprozess geerbt wurde, durch das der neuen Anwendung ersetzt (TProcess macht unter Unix genau das, während es unter Windows CreateProcess verwendet).

Edit: " am Ende der URL vergessen...

Gruß,
Sven

implementation 29. Dez 2010 18:46

AW: [GNU/Linux] Prozess starten
 
zu TProcess: Ist mir hier etwas overpowert und umständlich, Shell bzw. FpSystem passt bei mir gerade einfach zu gut rein.

zu fork()/exec(): Interessant, sollte ich mir merken. Danke!

JamesTKirk 29. Dez 2010 21:11

AW: [GNU/Linux] Prozess starten
 
Zitat:

Zitat von implementation (Beitrag 1071051)
zu TProcess: Ist mir hier etwas overpowert und umständlich, Shell bzw. FpSystem passt bei mir gerade einfach zu gut rein.

Ich hätte dann noch ExecuteProcess im Angebot. Ist in der Unit SysUtils, Cross Platform und aufs nötigste reduziert.

Gruß,
Sven

Assarbad 4. Jan 2011 00:56

AW: [GNU/Linux] Prozess starten
 
Zitat:

Zitat von implementation (Beitrag 1071003)
Daher hilft mir fork() leider nicht weiter.

Doch! Unter unixoiden Systemen ist es generell fork -> exec!

fork() kopiert in der Tat den aktuellen Prozeß und exec() ersetzt das Image. Ich empfehle die einschlägige Literatur.

implementation 4. Jan 2011 10:10

AW: [GNU/Linux] Prozess starten
 
Zitat:

Zitat von Assarbad (Beitrag 1072098)
Zitat:

Zitat von implementation (Beitrag 1071003)
Daher hilft mir fork() leider nicht weiter.

Doch! Unter unixoiden Systemen ist es generell fork -> exec!

fork() kopiert in der Tat den aktuellen Prozeß und exec() ersetzt das Image. Ich empfehle die einschlägige Literatur.

Hat mir JamesTKirk ja auch gerade erklärt.
Trotzdem danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz