Убить дочерний процесс, если это занимает слишком много времени - PullRequest
4 голосов
/ 17 июня 2011

При использовании системного вызова fork в C ++, какой самый простой способ убить дочерний процесс, если для выполнения того, что предполагается выполнить, требуется слишком много времени?

Например, если каким-то образом он попадет в бесконечный цикл. Что должен сделать родительский процесс, чтобы установить тайм-аут для дочернего процесса?

Ответы [ 2 ]

5 голосов
/ 17 июня 2011

Используйте WNOHANG с waitpid и спите между ними.Примерно так должно это сделать:

while (times < max_times) {
    sleep(5); /* sleep 5 seconds */
    rc = waitpid(-1, &status, WNOHANG);
    if (rc < 0) {
        perror("waitpid");
        exit(1);
    }
    if (WIFEXITED(status) || WIFSIGNALED(status)) {
        /* it's done */
        break;
    }
    times++;   
}

if (times == max_times) {
    /* ... */
}
0 голосов
/ 17 июня 2011

Я думаю, вам нужно waitpid с тайм-аутом и по тайм-ауту kill дочерний процесс (при условии, что дочерний процесс завис). Проверьте эту страницу для идей: Эквивалент ожидания с тайм-аутом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...