1. Если ваша программа работает в многопроцессорном режиме, вам необходимо знать, какой процесс записывает "0" в терминал.
#!/usr/bin/env python3
'''
a simple program to stimulate writing terminal in multiple processes.
'''
prog name: ttywriter.py
import time
import sys
import multiprocessing
def print_stderr(s):
sys.stderr.write(f'{s}\n')
while True:
print("I'm writing to my terminal")
p = multiprocessing.Process(target=print_stderr,args=("I am a CPP program, writing to termianl",))
p.start()
time.sleep(1)
Псевдотерминал обычно открывается как файловый дескриптор 1 и 2. вы можете strace
их.
# tty
/dev/pts/0
# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 2640 2427 0 07:07 pts/0 00:00:00 python3 ./ttywriter.py
# lsof -p `pgrep -f ttywriter` | grep pts
python3 2640 root 0u CHR 136,0 0t0 3 /dev/pts/0
python3 2640 root 1u CHR 136,0 0t0 3 /dev/pts/0
python3 2640 root 2u CHR 136,0 0t0 3 /dev/pts/0
# strace -s 65536 -e trace=write -e write=1,2 -fp `pgrep -f ttywriter`
strace: Process 2640 attached
write(1, "I'm writing to my terminal\n", 27) = 27
| 00000 49 27 6d 20 77 72 69 74 69 6e 67 20 74 6f 20 6d I'm writing to m |
| 00010 79 20 74 65 72 6d 69 6e 61 6c 0a y terminal. |
strace: Process 2695 attached
[pid 2695] write(2, "I am a CPP program, writing to termianl\n", 40) = 40
| 00000 49 20 61 6d 20 61 20 43 50 50 20 70 72 6f 67 72 I am a CPP progr |
| 00010 61 6d 2c 20 77 72 69 74 69 6e 67 20 74 6f 20 74 am, writing to t |
| 00020 65 72 6d 69 61 6e 6c 0a ermianl. |
[pid 2695] +++ exited with 0 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=2695, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---