Programm sauber beenden

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Programm sauber beenden

Beitrag 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
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Re: Programm sauber beenden

Beitrag 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 :)
cptdark
Beiträge: 56
Registriert: 28.02.2010 14:13
Kontaktdaten:

Re: Programm sauber beenden

Beitrag 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
Antworten