Estoy escribiendo un monitor de programa como una tarea para un curso de sistemas operativos (muy básico, como una introducción a él).¿Cómo saber si un programa terminó su ejecución a través de una señal?
Una de las cosas que el monitor tiene que hacer es mostrar el código de terminación del programa que estaba monitoreando si terminaba por "causas naturales" o el código de la señal responsable de su terminación.
Ahora mismo estoy esperando que el niño termine su ejecución y luego capture su código de terminación. Este es el fragmento de código relacionado:
pid_t id = -1;
switch (id = fork()) {
// Error when forking:
case -1:
error(-1, "Something went wrong when forking.");
exit(-1);
// Code for the child process:
case 0:
// Just launch the program we're asked to:
execvp(argv[2], &argv[2]);
// If reached here it wasn't possible to launch the process:
error(1, "Process could not be launched.");
exit(1);
// Code for the parent process:
default:
// Just wait for the child to finish its execution:
wait(&return_value);
}
error(2)
es una función de registro, sólo para simplificar el código cada vez que surja un error.
Dependiendo de cómo el proceso tengo que muestran diferentes estados:
Process ended: X
o
Process terminated with signal X.
Donde X sería el código de terminación o la señal recibida. ¿Cómo podríamos saber si el proceso del niño terminó debido a una señal?
¡Gracias! Debería haberlo encontrado en el manual ... Lo siento por eso. – Johannes