orden de SIGCONT y SIGHUP enviado a un grupo de procesos de Linux huérfanos

APUE dice

Como el grupo de procesos se queda huérfano cuando termina el padre, POSIX.1 requiere que a cada proceso en el grupo de procesos recién huérfanos que se detiene (como lo hace nuestro hijo) se le envíe la señal de colgar (SIGHUP) seguida de la señal de continuar (SIGCONT)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <errno.h>
#define errexit(msg) do{ perror(msg); exit(EXIT_FAILURE); } while(0)
static void sig_hup(int signo)
{
    printf("SIGHUP received, pid = %d\n", getpid());
}
static void sig_cont(int signo)
{
    printf("SIGCONT received, pid = %d\n", getpid());
}
static void sig_ttin(int signo)
{
    printf("SIGTTIN received, pid = %d\n", getpid());
}
static void pr_ids(char *name)
{
    printf("%s: pid = %d, ppid = %d, pgrp = %d, tpgrp = %d\n",
           name, getpid(), getppid(), getpgrp(), tcgetpgrp(STDIN_FILENO));
}
int main(int argc, char *argv[])
{
    char c;
    pid_t pid;
    setbuf(stdout, NULL);
    pr_ids("parent");
    if ((pid = fork()) < 0) {
            errexit("fork error");
    } else if (pid > 0) { /* parent */
            sleep(5);
            printf("parent exit\n");
            exit(0);
    } else { /* child */
            pr_ids("child...1");
            signal(SIGCONT, sig_cont);
            signal(SIGHUP, sig_hup);
            signal(SIGTTIN, sig_ttin);
            kill(getpid(), SIGTSTP);
            //sleep(10);
            pr_ids("child...2");
            if (read(STDIN_FILENO, &c, 1) != 1) {
                    printf("read error from controlling TTY, errno = %d\n", 
                                                             errno);
            }
            printf("child exit\n");
    }
    exit(0);
  }

salida del programa:

padre: pid = 2036, ppid = 1959, pgrp = 2036, tpgrp = 2036
hijo ... 1: pid = 2037, ppid = 2036, pgrp = 2036, tpgrp = 2036
salida de los padres
xiejingfeng @ xiejingfeng-desktop: / codes / apue $ SIGCONT recibido, pid = 2037
SIGHUP recibido, pid = 2037
hijo ... 2: pid = 2037, ppid = 1, pgrp = 2036, tpgrp = 1959
error de lectura al controlar TTY, errno = 5
salida infantil

no se espera una salida como dice el libro porque el programa recibe SIGCONT en primer lugar, luego SIGHUP, lo que es muy confuso para mí, ¿pueden ayudarme?

gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta