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;
}
}