Я пишу программный монитор как задание для курса по операционным системам (хотя и очень простого, вроде введения в него).
Одна из вещей, которую должен сделать монитор, - это показать код завершения программы, которую он отслеживал, если она завершилась по «естественным причинам», или код сигнала, ответственного за ее завершение.
Прямо сейчас я ' m просто ждет, пока дочерний элемент закончит свое выполнение, а затем захватывает его код завершения. Это связанный фрагмент кода:
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)
- функция регистратора, просто для упрощения кода всякий раз, когда возникает ошибка.
В зависимости от того, как процесс, я должен показывать разные операторы:
Process ended: X
или
Process terminated with signal X.
Где X - это код завершения или полученный сигнал. Как мы могли узнать, завершился ли дочерний процесс из-за сигнала?