Seite 1 von 1

Programm sauber beenden

Verfasst: 10.05.2011 23:03
von cptdark
Hallo...

Ich starte ein Programm mittels der RunProgram() - Funktion, das dann parallel zum Hauptprogramm laufen soll.
Dieses möchte ich dann vom Hauptprogramm aus beenden, wenn das Hauptprogramm beendet wird; allerdings soll das aufgerufene Programm normal beendet werden, nicht abgeschossen.

Soweit ich das sehe muss ein SIGTERM gesendet werden; KillProgram() sendet bestimmt SIGKILL ?!

Hat da einer einen Codeschnipsel, wie ich das machen kann? Hab da grad irgendwie keine Idee...

danke

Re: Programm sauber beenden

Verfasst: 10.05.2011 23:11
von remi_meier

Code: Alles auswählen

kill_(pid, sig)
sollte gehen, wobei pid wahrscheinlich ProgramID()
und sig #SIGTERM = 15 entspricht.
Wie man die Signale abfängt, könntest du hier
raus lesen:
http://www.purebasic.fr/german/viewtopi ... lit=signal

Kann's leider nicht testen :)

Re: Programm sauber beenden

Verfasst: 11.05.2011 09:40
von cptdark
Danke. Funktioniert.

Nebenprogramm: (analog zu http://forums.purebasic.com/german/view ... 21&t=21290 )

Code: Alles auswählen

ProcedureC on_killed_do(signum)
   PrintN("Programm killed")
   PrintN(Str(signum))
   CloseConsole()
   End
EndProcedure

signal_(2,  @on_killed_do()) ; SIGINT
signal_(3,  @on_killed_do()) ; SIGQUIT
signal_(15, @on_killed_do()) ; SIGTERM

OpenConsole()

c    = CountProgramParameters()
For a = 0 To c-1
  PrintN("Parameter: >" + ProgramParameter(a) + "<")
Next a

Print("Waiting ")
Repeat
  Print(".")
  Delay(500)
ForEver
Hauptprogramm:

Code: Alles auswählen

;starten
eMailProg = RunProgram(BuildPath(BinPath, "email"), cmd, GetCurrentDirectory(), #PB_Program_Open)

;beenden
if IsProgram(eMailProg)
  If ProgramRunning(eMailProg)
    kill_(ProgramID(eMailProg), 15)
    CloseProgram(eMailProg)
  EndIf
EndIf