Как узнать, завершила ли программа свое выполнение с помощью сигнала?

Я пишу программный монитор как задание для курса по операционным системам (хотя и очень простого, вроде введения в него).

Одна из вещей, которую должен сделать монитор, - это показать код завершения программы, которую он отслеживал, если она завершилась по «естественным причинам», или код сигнала, ответственного за ее завершение.

Прямо сейчас я ' 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 - это код завершения или полученный сигнал. Как мы могли узнать, завершился ли дочерний процесс из-за сигнала?

6
задан Bill the Lizard 19 September 2012 в 16:24
поделиться