Очевидно, что если процесс в группе процессов остановлен, все процессы сигнализируются с помощью SIGHUP, а затем SIGCONT, когда лидер группы процессов завершается. Обработчик по умолчанию для SIGHUP завершает процесс. Ожидаемое поведение, как описано, например,
http://www.win.tue.nl/~aeb/linux/lk/lk-10.html
Из приведенной выше ссылки:
Если завершение процесса вызывает
процесс группы стать сиротами, и
какой-то член остановлен, тогда все
отправил сначала SIGHUP, а затем SIGCONT.
Идея в том, что, возможно, родитель
руководитель группы процессов - это работа
контрольная оболочка. (В том же сеансе
но другая группа процессов.) Как
Пока этот родитель жив, он может
справиться с остановкой и запуском
члены в группе процессов. Когда это
умирает, возможно, некому продолжать
остановленные процессы. Поэтому эти
остановленные процессы отправляются SIGHUP, поэтому
что они умирают, если они не поймают или
игнорировать его, а затем SIGCONT
продолжайте их.
EDIT:
Кстати, strace - замечательный инструмент для понимания сути подобных вещей. Если вы присоедините strace к одному из дочерних процессов, вы увидите, что SIGHUP доставляется, только если один из них останавливается, когда родитель (т.е. лидер группы процессов) умирает.
Вам необходимо изменить обработчик для SIGHUP, используя, например, sigaction (2), если вы хотите, чтобы процессы потомков выжили.