Prueba con esto. Aviso que uso Linux Mint Mate 18.1 y no lleva xterm por defecto (y ahora me da un poco de pereza instalarlo), así que no sé que tal ira.
#define _XOPEN_SOURCE
 
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
 
void sig_handler(int signo)
{
    time_t rawtime;
 
    printf("PADRE.SIG_HANDLER: Hora actual es: %s", ctime (&rawtime
)); }
 
void hilo_hijo() {
    pid_t ppid;
    pid_t pid;
    int terminal;
    char argumentos[255] = "-S";
 
    terminal = open("dev/ptmx", O_RDWR | O_NOCTTY);
    grantpt(terminal);
    unlockpt(terminal);
    dup2(0, terminal);
    dup2(1, terminal);
    dup2(2, terminal);
    strcat(argumentos
, ptsname
(terminal
));     pid = fork();
    if(pid == 0) {
        execl("xterm", argumentos);
    }
 
    ppid = getppid();
    printf("HIJO: Mi padre PID=%d.\n", ppid
);     printf("HIJO: Voy a enviar un mensaje a mi padre...\n");     kill(ppid, SIGUSR1);
    printf("HIJO: Hora de terminar.\n"); }
 
void hilo_padre(pid_t pid_hijo) {
    printf("PADRE: Programa hora ejecutandose. Mi hijo PID=%d.\n", pid_hijo
); 	printf("PADRE: Listo para recibir la señal SIGUSR1.\n"); 	signal(SIGUSR1, sig_handler);
	wait(NULL);
    printf("PADRE: Hora de terminar.\n"); }
 
int main() {
	pid_t pid;
 
	pid = fork();
 
    switch(pid) {
        case -1:
            printf("ERROR: No se pudo generar el hilo\n");             break;
 
        case 0:
            hilo_hijo();
            break;
 
        default:
            hilo_padre(pid);
            break;
    }
}