Как часть домашней работы, мне нужно создать дочерний процесс, который запускает файл .out и установить для него время ожидания 5 секунд. Дочерний процесс выполняет exec, и я хочу знать, как узнать, сделал ли дочерний процесс тайм-аут илинормально завершился в родительском процессе, который ожидает его завершения.
Я нашел в сети функцию setrlimit для установки времени ожидания 5 секунд на RLIMIT_CPU, и она работала, но не было никакого способа проверить, если дочерний процесстайм-аут или нет
Я также пытался выполнить цикл while с waitpid из NOHANG и использовал функцию time (), чтобы проверить, прошло ли 5 секунд, но проблема была в том, что на самом деле это не 5 секунд, что дочерний процессработает в них, но 5 секунд в режиме реального времени. Поэтому на одном компьютере он работал нормально, а на другом - для процессов, которые на самом деле не работали в течение 5 секунд, но меньше.
спасибо за помощь!
вот код для rlimit:
struct rlimit limit = {5, 5};
setrlimit(RLIMIT_CPU, &limit);
if (execvp(outFilePath, argv) == -1) {
return ERROR_OCCURED;
}
и ожидание:
while (TRUE /*&& currentTime - start < 5*/) {
if (waitpid(newPid, &newStatus, WNOHANG) != -1) {
if (WIFSIGNALED(newStatus)) {
break;
}
if (WIFEXITED(newStatus)) {
hasTimeOut = FALSE;
break;
}
} else {
if (errno == ECHILD) {
hasTimeOut = FALSE;
break;
} else {
return -1;
}
}
sleep(0);
//currentTime = time(NULL);
}
, и я установил hasTimeout впрежде чем ИСТИНА