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:
Post a Comment