Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Unabhängigen Prozess starten (https://www.delphipraxis.net/180524-unabhaengigen-prozess-starten.html)

seppitm 26. Mai 2014 14:43


Unabhängigen Prozess starten
 
Hallo,
hat einer von euch eine Idee wie es möglich ist einen Prozess zu starten ohne das er ein Child / Sub Prozess ist? Ich weiß das es geht, da die Serversoftware von Valve das auch kann. Mir geht es darum die Speicherbeschränkung zu umgehen. wenn ich 10 Childprozesse erstelle ist der Speicher für meine Anwendung irgendwann voll. Deshalb möchte ich gerne Prozesse unabhängig von meiner Anwendung Starten (als hätte der Benutzer sie gestartet).

Wozu das ist:
Ich möchte gerne für meinen Windows Root eine Weboberfläche Basteln über die ich Gameserver starten kann, bis jetzt is es so das irgendwann der Stack für mein Programm voll ist. und die Server sollen auch nicht ausgehen wenn mein Programm aus ist.

mfg
Sebastian

Sir Rufo 26. Mai 2014 14:47

AW: Unabhängigen Prozess starten
 
Meinst du sowas wie MSDN-Library durchsuchenShellExecute?

himitsu 26. Mai 2014 14:51

AW: Unabhängigen Prozess starten
 
Was sind Child-Prozesse und wie erstellst du die?

Jeder Prozess hat in Windows grundsätzlich immer seinen eigenen Speicherbereich.

Dalai 26. Mai 2014 15:54

AW: Unabhängigen Prozess starten
 
Zitat:

Zitat von himitsu (Beitrag 1260293)
Was sind Child-Prozesse [...]?

Naja, jeder Prozess auf jedem Betriebssystem hat irgendeinen Parent(prozess). Kann man sich im Process Explorer angucken, und einige Tools (auch solche für die Kommandozeile) können auch ganze Prozessbäume töten. Prozesse, die keinen (sichtbaren) Parent haben, gibt es zwar auch, aber die sind dann entweder spezielle Prozesse (init bei Linux, System und System Idle Process bei Windows) oder der Parent ist beendet worden.

Zitat:

Jeder Prozess hat in Windows grundsätzlich immer seinen eigenen Speicherbereich.
Hier kann ich nur zustimmen. Dazu gehört auch, dass jeder Prozess seinen eigenen Stack hat usw. Die Prozesse laufen wirklich unabhängig voneinander, und kein Kindprozess kann den Speicher des Vaters volllaufen lassen. Daher bleibt unklar, was eigentlich gemeint ist.

MfG Dalai

Neutral General 26. Mai 2014 16:00

AW: Unabhängigen Prozess starten
 
Zitat:

Zitat von seppitm (Beitrag 1260288)
Hallo,
wenn ich 10 Childprozesse erstelle ist der Speicher für meine Anwendung irgendwann voll. Deshalb möchte ich gerne Prozesse unabhängig von meiner Anwendung Starten (als hätte der Benutzer sie gestartet).

Wie schon gesagt wurde: Jeder Prozess (egal ob Child-Prozess oder nicht) erhält seinen eigenen virtuellen Speicher und kein anderer Prozess hat normalerweise auf den Speicher dieses Prozesses Zugriff.

Wenn du mehrere dieser Prozesse startest und der Arbeitsspeicher ist irgendwann voll, dann liegt das daran dass der Pc einfach nicht genug Arbeitsspeicher hat um alle deine Prozesse zu versorgen.

(Angenommen du hast 4GB RAM und 4 Prozesse die jeweils 1GB verbrauchen -> Arbeitsspeicher voll)

jaenicke 26. Mai 2014 16:12

AW: Unabhängigen Prozess starten
 
Für mich hört sich das so an als würde da ein Aufruf z.B. einer PHP-Seite passieren und darin dann der Prozess gestartet werden, der dann wieder weitere Prozesse startet, richtig?

seppitm 26. Mai 2014 20:12

AW: Unabhängigen Prozess starten
 
Ich starte sie via CreateProcess mit Delphi. Ich habe 32 GB Ram. Wenn ich eine Java Anwendung aus Delphi heraus starte und ihr 128MB RAM zuweise ist alles okay.
Wenn ich Java allerdings 2048MB zuweise, stürzt der Parent (also mein Delphi Programm) ab. Es passiert genau das gleiche wenn ich mehrere Server starte, die irgendwann zu viel RAM nutzen.

In einem Forum habe ich gelesen das die initiale Stack Größe erhört werden kann, den genaue Post habe ich nicht mehr aber das hier ist ähnlich, genau so habe ich es dann auch gemacht:

http://www.delphipraxis.net/148797-m...cht-nicht.html

Das hat auch funktioniert, doch es gibt auch dort ein Limit (was ich schon öfters überschritten habe, was dazu führt das alle Gameserver aus sind). Deshalb möchte ich gerne keinen sub Prozess von mir sondern einen vom System aus Starten. so wie hier zum Beispiel (c++):

http://stackoverflow.com/questions/5...endent-process

Dalai 26. Mai 2014 21:17

AW: Unabhängigen Prozess starten
 
Zitat:

Zitat von seppitm (Beitrag 1260346)
Ich starte sie via CreateProcess mit Delphi.

Hast du dazu mal etwas Code?

Zitat:

Ich habe 32 GB Ram.
Die überhaupt nicht relevant sind. Ich nehme mal an, dass dein Delphi-Programm 32 Bit ist. Dann beschränkt sich dein Adressraum auf 2 GiB.

Zitat:

Wenn ich eine Java Anwendung aus Delphi heraus starte und ihr 128MB RAM zuweise ist alles okay.
Wieso wird die wichtige Info, dass es um Java geht, jetzt erst erwähnt? Die JVM hat teilweise ihr eigenes Verhalten. Auf welche Weise (mit welchem Parameter) weist du denn der JVM den Speicher zu? Um welche Java-Software geht's denn? (Mal wieder Minecraft?)

Zitat:

Wenn ich Java allerdings 2048MB zuweise, stürzt der Parent (also mein Delphi Programm) ab.
Wie genau passiert das? Einfach so sang- und klanglos? Oder gibt's ne Meldung (von Dr. Watson bzw. der Fehlerberichterstattung)? Wenn ja, wie lautet diese?

MfG Dalai

seppitm 26. Mai 2014 21:34

AW: Unabhängigen Prozess starten
 
Habe den befehl nicht mehr habe es in der aktuellen Version mit der ShellAPI gemacht.

Es handelt sich um eine 64Bit Anwendung, ich bin ja nicht dumm...

Es handelt sich um das spiel um Minecraft richtig, was sollte sonst so viel verbrauchen.
Code:
java -Xmx3072M -Xms1024M -XX:MaxPermSize=1024m -Duser.dir="C:\Users\USERNAME\AppData\Roaming\MCPACK\v4" -Dfml.ignorePatchDiscrepancies=true -Djava.library.path="C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\enhaNatives" -cp "C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\argo\argo\2.25_fixed\argo-2.25_fixed.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\google\code\gson\gson\2.2.2\gson-2.2.2.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\google\guava\guava\14.0\guava-14.0.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\paulscode\codecjorbis\20101023\codecjorbis-20101023.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\paulscode\codecwav\20101023\codecwav-20101023.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\paulscode\libraryjavasound\20101123\libraryjavasound-20101123.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\paulscode\librarylwjglopenal\20100824\librarylwjglopenal-20100824.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\com\paulscode\soundsystem\20120107\soundsystem-20120107.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\commons-io\commons-io\2.4\commons-io-2.4.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\lzma\lzma\0.0.1\lzma-0.0.1.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\java\jinput\jinput\2.0.5\jinput-2.0.5.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\java\jinput\jinput-platform\2.0.5\jinput-platform-2.0.5-natives-windows.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\java\jutils\jutils\1.0.0\jutils-1.0.0.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\minecraft\launchwrapper\1.3\launchwrapper-1.3.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\minecraftforge\minecraftforge\9.10.0.845\minecraftforge-9.10.0.845.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\minecraftforge\minecraftforge\9.10.1.871\minecraftforge-9.10.1.871.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\optifine\optifine\1.6.2_HD_C4\optifine-1.6.2_HD_C4.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\net\sf\jopt-simple\jopt-simple\4.5\jopt-simple-4.5.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\bouncycastle\bcprov-jdk15on\1.47\bcprov-jdk15on-1.47.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\lwjgl\lwjgl\lwjgl-platform\2.9.0\lwjgl-platform-2.9.0-natives-windows.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\lwjgl\lwjgl\lwjgl_util\2.9.0\lwjgl_util-2.9.0.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\ow2\asm\asm-all\4.1\asm-all-4.1.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\scala-lang\scala-compiler\2.10.2\scala-compiler-2.10.2.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\libraries\org\scala-lang\scala-library\2.10.2\scala-library-2.10.2.jar;C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\versions\1.6.2-Forge9.10.1.871\1.6.2-Forge9.10.1.871.jar" net.minecraft.launchwrapper.Launch --username USER --session token:1337:1337 --version 1.6.2-Forge9.10.1.871 --gameDir "C:\Users\USERNAME\AppData\Roaming\MCPACK\v4" --assetsDir "C:\Users\USERNAME\AppData\Roaming\MCPACK\v4\assets" --tweakClass cpw.mods.fml.common.launcher.FMLTweaker -Dfml.ignorePatchDiscrepancies=true --server 1313131231232 --port 1337
Das baut mein Tool halt dynamisch zusammen.

Es stürzt einfach ohne Meldung ab, manchmal kommt schon eine aber bekomme die grade nicht reproduziert, es ist allerdings nicht so wenn ich den obigen Befehl in die CMD packe und das so ausführe...

Luckie 26. Mai 2014 21:39

AW: Unabhängigen Prozess starten
 
Zitat:

Zitat von Neutral General (Beitrag 1260309)
(Angenommen du hast 4GB RAM und 4 Prozesse die jeweils 1GB verbrauchen -> Arbeitsspeicher voll)

Was ist denn das für ein Unsinn? Mit 8 GB könnten alsur 8 Prozesse laufen? Guck mal in deinen Taskmanager wie viel Prozesse da schon nach dem Start laufen. Dienste sind auch Prozesse. Das Stichwort ist hier virtueller Adressraum und was alles dazu gehört.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 Uhr.
Seite 1 von 2  1 2      

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