Control-C и SIGINT - это не одно и то же.
В случае ввода с клавиатуры в ОС есть «драйвер tty», который выполняет эхо-символы, обрабатывает клавиши delete
и т. Д. Это также то, что распознает control-C (или каков ваш символ intr
) и отправляет процесс SIGINT.
Когда у вас есть канал к другому процессу, драйвер tty не задействуется *, поэтому control-C просто передается как обычные данные.
Вам нужно будет найти пид и отправить SIGINT прямо на него. Конечно, у вас могут не быть разрешения на отправку ему сигнала (потому что вы использовали sudo для запуска другой задачи от имени root) ....
*, если вы не используете псевдотерминал (pty), чего нет у NSPipe, и вы все равно не хотите: -)