Programme als SLAVE / PID Weitergabe

Anfängerfragen zum Programmieren mit PureBasic.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Programme als SLAVE / PID Weitergabe

Beitrag von LifeSux »

Hallo! Ich habe ein kleines Problem. Ich probiers mal bildlich:

Programm1 ---startet-> Programm2 (und notiert sich sofort pid für spätere Rückfragen)

Ich will:
Programm1 ---startet-> MeinProgram ---startet Programm2

Mein Problem ist, dass sich Programm1 jetzt die PID von MeinProgramm notiert. Weder Programm1 noch Programm2 wurden von mir geschrieben. Will Programm1 jetzt Programm2 killen, killt es natürlich MeinProgramm anstelle von Programm2, da Programm1 nur meine PID hat. Gibt es da etwas was ich machen kann? So wie:

Wenn MeinProgramm gekillt wird, kill es Programm2 mit
oder
Programm2 erhält die PID von MeinProgramm beim starten....

Bitte :[
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Du kannst vom MeinProgramm noch ein eigenes Programm starten lassen das wartet bis Mein Programm gekillt wurde und das dann Programm2 killt...
(\/) (°,,,°) (\/)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Du kannst doch einfach Programm2 Killen, wenn Du geschlossen wirst.
Ich nehme mal an, das MeinProgramm eine Console ist, dann brauchste
natürlich noch ein Ereignis, wenn Du geschlossen wirst, das geht dann so:

Code: Alles auswählen

Procedure ControlHandler(fdwCtrlType)
  Select fdwCtrlType
    Case #CTRL_C_EVENT
      Debug "ctrl-c"
      ProcedureReturn #True
    Case #CTRL_CLOSE_EVENT
      ; hier Programm 2 schliessen
      Debug "close"
      CloseConsole()
    Case #CTRL_BREAK_EVENT
    Case #CTRL_LOGOFF_EVENT
    Case #CTRL_SHUTDOWN_EVENT
  EndSelect
  ProcedureReturn #False
EndProcedure

OpenConsole() 
ConsoleColor(14,0) 
ConsoleLocate(10,12) 
PrintN("this is a test") 
SetConsoleCtrlHandler_(@ControlHandler(), #True) 

Repeat ;endless Loop 
  Delay(1) 
ForEver 
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Vielen Dank schonmal für die Antwort :)
Aber verursacht die

Code: Alles auswählen

Repeat ;endless Loop
  Delay(1)
ForEver 
nicht unnötige CPU Arbeit?
Sehe ich das richtig, dass das eine Procedure ist, welche über einen Handler ermittelt ob die Console geschlossen wird und anhand dessen dann Prog2 killt?
Ich hab damit noch net so viel gearbeitet... Aber is ja fast Wochenende /:-> , da hab ich denn mehr als genug Zeit. Danke schonmal!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

vielleicht sagste erstmal ob MeinProgram eine GUI ist, oder eine Console?
Die Schleife ist nur Platzhalter, für das, was MeinProgram macht, irgendwas
wirds doch wohl machen :wink:
Ansonsten haste es richtig erkannt, ich bin mal von einer Console
ausgegangen, weil mit einer GUI wäre es ja wesentlich einfacher auf das
Beenden zu reagieren.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

MeinProgram ist bisher nur eine BatchDatei, welche allerdings bald als richtiges Programm realisiert werden soll. Ich habe beide Möglichkeiten, würde ein ConsoleWindows allerdings begrüßen. Das Einzige, was MeinProgram macht, ist eine bestimmte EXE mit bestimmten Parametern zu starten, anstatt diese EXE ohne Parameter starten zu lassen. :]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

LifeSux hat geschrieben:Das Einzige, was MeinProgram macht, ist eine bestimmte EXE mit bestimmten Parametern zu starten, anstatt diese EXE ohne Parameter starten zu lassen. :]
... dir ist bekannt, dass du in einer Verknüpfung für die EXE Parameter mit angeben kannst?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Kaeru Gaman hat geschrieben:
LifeSux hat geschrieben:Das Einzige, was MeinProgram macht, ist eine bestimmte EXE mit bestimmten Parametern zu starten, anstatt diese EXE ohne Parameter starten zu lassen. :]
... dir ist bekannt, dass du in einer Verknüpfung für die EXE Parameter mit angeben kannst?
Gute Idee, aber leider nicht ganz so einfach. Das Programm1, welches Programm2 mit bestimmten Parametern aufrufen würde, hat nicht immer die gleichen Parameter. Meine bisherige Batch nimmt die Parameter AN und startet dann Programm2 mit diesen. Deshalb kann ich keine Verknüpfug nehmen. Versteht das eigtl wer? XD Iwi ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

achso.. stimmt ja, dein prog soll ja so ein zwischenschalterwalter sein...

warum startet eigentlich das Prog1 nicht gleich das Prog2 mit den richtigen Parametern?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Also.
Ich biete kostenloses Sponsoring (lol) für Clans bei etwas unbekannteren Games an. (z.B. Teeworld, Soldat)
Das Webinterface welches man kostenlos bekommen kann zum verwalten dieser Server bietet auch so genanntes "Vermieten / Buchen" von Servern an. Da kann dann jede x-belibige Person einen Server mit wunsch- Setting fürs bis zu 2 Stunden alle 14 Tage mieten. Dadurch könnten auch kleine Clans, welche nur 1 - 2 mal die Woche ein Match haben in den Genuss eines dedicated Servers kommen. Mit den GameServern an sich funktioniert es schon zu 100%. Wunderbar. Doch ich will den 'kleinen' auch einen Teamspeak Server für die Zeit zur Verfügung stellen, bei dem ich derzeit diese Probleme erfahre. (Vom Hersteller kein Support in dieser Richtung.)
Auch TS ist nativ im Webinterface 'eingebunden', verursacht allerdings Probleme wenn man probiert einen Server zu buchen (es geht angeblich (laut Hersteller des Interface) aus technischen Gründen nur eine Server oder so). Ich habe jetzt rausgefunden, dass man in der Commandline beim starten des TS² Servers auch die INI und Datenbank bestimmen kann. Das Webinterface kann allerdings keine Datenbank erstellen. Das macht jetzt MeinProgramm mit den Settings, die der Buchende im Webinterface einstellt. Diese eingestellten Settings vom Buchenden werden also an MeinProgramm geben, dieses erstellt die passende Datenbank und gibt dann alle nötigen Commands (wie z.B. die zu nutzende Datenbank) an den TeamSpeak Server.
Jetzt allerdings staret das Webinterface ja MeinProgramm. (Eine Batch als Exe... e.e) Dadurch kann das WebInterface den TS² Server welcher von MeinProgramm gestartet wird nicht beenden / restarten, da dem WebInterface nur die PID von MeinProgramm vorliegt. Ist die Buchungszeit (natürlich auch 100% kostenlos) jetzt abgelaufen, kann das WebInterface den Server nicht beenden sondern beendet nur MeinProgramm.
Kann mich irgendwer verstehen / mir folgen?

Vllt. hat ja noch jemand nen Silbertablet irgendwo rumliegen... würde auch Traffic / Webspace / Serverleistung / Nen Server (also für ein bestimmtes Game wenn ichs hab und es nich zu viel Leistung braucht...) bieten, falls mal jmd ne art Chat mit Server bauen will oder sowas. Immerhin ist das alles komplett uneigennützig... (wird bestimmt auch von den Clans bestätigt)
Antworten