Ik heb een programma (programma A) dat als volgt het terminatie-signaal ondervangt:
Dit doet het niet alleen voor SIGTERM, maar ook voor alle andere SIG...-waarden.
Nou wil ik graag dit programma opstarten vanuit programma B, bijvoorbeeld dmv spawnl of CreateProcess (dat lukt helemaal) en het later weer killen (dat lukt niet helemaal). Het moet dan namelijk wel zo zijn dat catch_term aangeroepen wordt, anders sluit A niet netjes af.
Ik heb dit al geprobeerd door TerminateProcess aan te roepen, maar dat sluit m niet netjes af. Ik heb gekeken naar de raise-functie, maar die kan niet naar een ander proces raisen.
Ik dacht ook dat ik misschien die Control-C die voor de SIGTERM zorgt kan schrijven naar A en wel als volgt:
waarbij hChildStdinWrDup (als het goed is) een handle naar dat stdin van A is. Ook dit werkt niet.
Iemand een idee hoe ik dit voor elkaar kan krijgen?
C:
1
| signal(SIGTERM, catch_term); |
Dit doet het niet alleen voor SIGTERM, maar ook voor alle andere SIG...-waarden.
Nou wil ik graag dit programma opstarten vanuit programma B, bijvoorbeeld dmv spawnl of CreateProcess (dat lukt helemaal) en het later weer killen (dat lukt niet helemaal). Het moet dan namelijk wel zo zijn dat catch_term aangeroepen wordt, anders sluit A niet netjes af.
Ik heb dit al geprobeerd door TerminateProcess aan te roepen, maar dat sluit m niet netjes af. Ik heb gekeken naar de raise-functie, maar die kan niet naar een ander proces raisen.
Ik dacht ook dat ik misschien die Control-C die voor de SIGTERM zorgt kan schrijven naar A en wel als volgt:
C:
1
2
| sprintf( chBuf, "%c", 0x03); WriteFile(hChildStdinWrDup, chBuf, 1, &dwWritten, NULL); |
waarbij hChildStdinWrDup (als het goed is) een handle naar dat stdin van A is. Ook dit werkt niet.
Iemand een idee hoe ik dit voor elkaar kan krijgen?
[ Voor 4% gewijzigd door SWfreak op 14-01-2003 21:22 . Reden: verduidelijkingen ]