12.2.05

Matar al hijo perezoso

El siguiente programa lanza un proceso hijo, y si después de X segundos el proceso sige activo, lo mata con una señal SIGKILL.

Es conveniente jugar con el valor del sleep(..) del hijo para ver el comportamiento de este programa.


#include "unistd.h"
#include "signal.h"
#include "wait.h"
#include "sys/types.h"

int main()
{
pid_t pid, pid_hijo;
int status;
int sleep_padre = 2;
int sleep_hijo = 1;


if ( (pid_hijo=fork()) == -1) {
perror("Error en el fork - ");
return -1;
}

if (pid_hijo == 0) {
sleep(sleep_hijo);
printf("Termina hijo.\n");
exit(0);
}

sleep(sleep_padre);
pid = waitpid(pid_hijo, &status, WNOHANG);

printf("pid = %ld / pid_hijo = %ld / status = %i\n", pid, pid_hijo, status);

if (kill(pid_hijo,0)==0) {
printf("Hijo aún en activo. Lo termino\n");
kill(pid_hijo, SIGTERM);
waitpid(pid_hijo, NULL, 0);
}
printf("Termina padre.\n");

return 0;
}

No comments: