Есть идеи, как это исправить?
Я не знаю, какой у вас Unix.Я просто попытался воспроизвести вашу проблему под Linux;но строки вставки на моем компьютере работают нормально, поэтому я не могу воспроизвести проблему.
Если в вашем варианте Unix есть трассировщик системных вызовов (Linux: strace
, SunOS / Solars: truss
, FreeBSD: strace
, MacOS: dtruss
(?)), Я бы отслеживал системные вызовы:
strace -f -o file_myprog.out ./my_program
miniterm /dev/pty/6
(обратите внимание на -f
, что означает, что системные вызовы подпроцессов, создаваемых fork()
,также отладка. Это необходимо, потому что Python будет создавать такие подпроцессы.)
Теперь воспроизведите ситуацию, когда программа работает неправильно и завершает работу my_program
, используя pkill -KILL my_program
.(Отправьте сигнал -KILL
, чтобы убедиться, что my_program
убит немедленно.)
Сделайте это снова - на этот раз отладка miniterm
и убийство miniterm
в «неправильной ситуации»:
./my_program
strace -f -o file_miniterm.out miniterm /dev/pty/6
В конце двух выходных файлов (file_myprog.out
и file_miniterm.out
) вы можете увидеть последние «действия», которые выполняли две программы перед тем, как вы их убили.Возможны различные сценарии:
miniterm
отправлял данные на /dev/pty/6
, но ваша программа не получила никаких данных.В этом случае возникает проблема с самой виртуальной консолью. miniterm
по какой-то причине не отправило данные на /dev/pty/6
.В этом случае у вас есть проблема с miniterm
. miniterm
, даже не получили данные, вставленные с использованием read()
...