Мне кажется, что если у вас действительно есть pty (если вы не подразумеваете что-то другое под псевдотерминалом), то все, что вам нужно сделать, это отправить Control-C этому FD.В доказательство этого я представляю следующий код на Python (но достаточно близко к C, необходимому для этого):
import pty, os, sys, time
pid, fd = pty.fork()
if pid == 0:
os.execv('/bin/sh', ['/bin/sh', '-c',
'while true; do date; sleep 1; done'])
sys.exit(0)
time.sleep(3)
os.write(fd, '^C')
print 'results:', os.read(fd, 1024)
Это разветвляет процесс под pty, который выполняет бесконечный цикл печати даты,Затем родитель ожидает 3 секунды и отправляет элемент управления C.
Это приводит к следующему выводу:
guin:/tmp$ time python /tmp/foo
results: Fri Feb 5 08:28:09 MST 2010
Fri Feb 5 08:28:10 MST 2010
Fri Feb 5 08:28:11 MST 2010
python /tmp/foo 0.02s user 0.01s system 1% cpu 3.042 total
guin:/tmp$
Он выполняется чуть более 3 секунд, печатает дату 3 раза ивышел.