(Ich gehe davon aus, dass Sie das Verhalten der Tastenkombination ctrl+c in einem Terminalfenster emulieren wollen. Wenn Sie wirklich meinen, ein ETX an den Zielprozess zu senden, wird Ihnen diese Antwort nicht weiterhelfen).
Die Tastenkombination ctrl+c sendet kein ETX an die Standardeingabe des Programms. Dies lässt sich leicht überprüfen, da reguläre Tastatureingaben von einem laufenden Programm ignoriert werden können, während ctrl+c (normalerweise) sofort wirksam wird. So können auch Programme, die die Standardeingabe komplett ignorieren (wie z.B. int main() { while (1); }
) kann durch Drücken von ctrl+c beendet werden.
Das funktioniert, weil Terminals die Tastenkombination ctrl+c abfangen und eine SIGINT
Signal an den Prozess zu senden. Daher hat das Schreiben eines ETX an die Standardeingabe eines Programms keine Wirkung, da der Tastendruck vom Terminal abgefangen und das resultierende Zeichen nicht an die Standardeingabe des laufenden Programms geliefert wird.
Sie können senden SIGINT
Signale an Prozesse, die durch eine NSTask
durch die Verwendung der -[NSTask interrupt]
Methode.
[task interrupt];
Ansonsten können Sie auch beliebige Signale an Prozesse senden, indem Sie die kill
Funktion (die, wohlgemerkt, nicht unbedingt Programme tötet).
#include <signal.h>
kill(task.processIdentifier, SIGINT);