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
Programm sauber beenden
- remi_meier
- Beiträge: 1078
- Registriert: 29.08.2004 20:11
- Wohnort: Schweiz
Re: Programm sauber beenden
Code: Alles auswählen
kill_(pid, sig)
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
Danke. Funktioniert.
Nebenprogramm: (analog zu http://forums.purebasic.com/german/view ... 21&t=21290 )
Hauptprogramm:
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
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