(Я предполагаю, что вы хотите эмулировать поведение нажатия клавиш ctrl + c в окне терминала. Если вы действительно хотите отправить ETX целевому процессу, этот ответ не будет чтобы помочь вам.)
Комбинация клавиш ctrl + c не отправляет ETX на стандартный ввод программы. Это можно легко проверить, поскольку обычный ввод с клавиатуры может игнорироваться запущенной программой, но ctrl + c (обычно) немедленно вступает в силу. Например, даже программы, которые полностью игнорируют стандартный ввод (например, int main() { while (1); }
), могут быть остановлены нажатием ctrl + c.
Это работает, потому что терминалы перехватывают комбинацию клавиш ctrl + c и вместо этого доставляют процессу SIGINT
сигнал. Поэтому запись ETX на стандартный ввод программы не имеет никакого эффекта, поскольку нажатие клавиши фиксируется терминалом, а полученный символ не доставляется на стандартный ввод работающей программы.
Вы можете отправлять SIGINT
сигналы процессам, представленным NSTask
, используя метод -[NSTask interrupt]
.
[task interrupt];
В противном случае вы также можете отправлять произвольные сигналы процессам с помощью функции kill
(которая, на ваш взгляд, не обязательно убивает программы).
#include <signal.h>
kill(task.processIdentifier, SIGINT);