Это связано с тем, что ваш дочерний процесс сейчас находится в потерянной группе процессов, где ни один процесс не является прямым потомком оболочки (который должен выполнять управление заданиями).
Потерянная группа процессов: Группа процессов, у которой по крайней мере нет члена, у которого есть родительский элемент не в группе процессов, а в том же сеансе (~ является прямым потомком оболочки).
Пока родительский и дочерний элементы работают, ситуация выглядит следующим образом:
$ ps fax -o pid,pgid,sid,ppid,tty,stat,time,cmd
27177 27177 27177 32170 pts/6 Ss 00:00:00 | \_ /bin/bash
4706 4706 27177 27177 pts/6 S+ 00:00:00 | \_ ./ex1
4707 4706 27177 4706 pts/6 S+ 00:00:00 | \_ ./ex1
В группе процессов 4706 есть два процесса, 4706 и 4707. 4706 - это дочерний элемент 27177, который находится втот же сеанс (27177), но другая группа процессов (27177): это оболочка, которая имеет дело с управлением заданиями для группы процессов 4706.
Когда родитель умирает, ситуация выглядит следующим образом:
$ ps fax -o pid,pgid,sid,ppid,tty,stat,time,cmd
27177 27177 27177 32170 pts/6 Ss+ 00:00:00 | \_ /bin/bash
4664 4663 27177 1 pts/6 S 00:00:00 ./ex1
В группе 4663 только один процесс, 4664, и его родитель (init) не находится в одном сеансе.Оболочка не может иметь дело с управлением заданиями для этой группы процессов, поэтому read()
и write()
get EIO
.