Хобрук: Ваш путь к мастерству в программировании

Тайм-аут функции waitpid () в секундах

Я написал этот код:

static int exec_prog(const char **argv)
{
pid_t   my_pid;
int   status, timeout /* unused ifdef WAIT_FOR_COMPLETION */;

if (0 == (my_pid = fork())) {
        if (-1 == execve(argv[0], (char **)argv , NULL)) {
                perror("child process execve failed [%m]");
                return -1;
        }
}

#ifdef WAIT_FOR_COMPLETION
timeout = 1000;

while (0 == waitpid(my_pid , &status , WNOHANG)) {
        if ( --timeout < 0 ) {
                perror("timeout");
                return -1;
        }
        sleep(1);
}

printf("%s WEXITSTATUS %d WIFEXITED %d [status %d]\n",
        argv[0], WEXITSTATUS(status), WIFEXITED(status), status);

if (1 != WIFEXITED(status) || 0 != WEXITSTATUS(status)) {
        perror("%s failed, halt system");
        return -1;
}

#endif
return 0;
}

Как мне узнать время ожидания оплаты (в секундах)? Я хочу, чтобы родитель подождал своего ребенка не более 5 секунд, я думаю, это 1000 циклов, но я не уверен ...

Спасибо!!

03.12.2016

  • Ваш вопрос - это проблема XY. Вы спрашиваете, как рассчитать время waitpid, когда вам действительно нужно подождать не более 5 секунд. Расчет времени ожидания - это совершенно неправильный способ достижения вашей реальной цели по многим причинам (например, у разных компьютеров будет разное время). Посмотрите на дубликат, чтобы узнать, как достичь вашей настоящей цели. 03.12.2016
  • Возможный дубликат Есть ли версия системного вызова wait (), устанавливающая тайм-аут? 03.12.2016
  • Вам следует изучить правильное форматирование C. Или узнайте, как полностью скрыть свой код. 03.12.2016
  • Я не понимаю, ждет ли этот код 1 секунду, пока ребенок не выйдет, или дождитесь выхода ребенка, а затем подождите 1 секунду? в то время как (waitpid (pid, & status, WNOHANG) == 0) {sleep (1); } 03.12.2016
  • извините, я не понимаю, как редактировать мой код 03.12.2016
  • На странице руководства по waitpid: WNOHANG означает немедленный возврат, если ни один дочерний элемент не вышел. Таким образом, этот код проверяет наличие любого вышедшего дочернего элемента. Если нет, то поспите 1 секунду и попробуйте еще раз. 03.12.2016
  • функция: fork() имеет три условия возврата: сбой (‹0) дочерний (== 0) и родительский (› 0). Опубликованный код обрабатывает сбой как родительский. Это ошибка 03.12.2016
  • код не должен выходить до выхода ребенка. В противном случае дочерний процесс становится zombie. Зомби-процессы очень сложно устранить без перезагрузки компьютера. 03.12.2016
  • опубликованный код выполнится сам. Это означает, что каждый процесс (снова) создаст дочерний процесс, который создаст дочерний процесс ... Т.е. это никогда не закончится, пока в ОС не закончатся доступные слоты для процессов. И ни один из этих дочерних процессов никогда не завершится. Настоятельно рекомендую, чтобы execve() выполнил что-нибудь еще. 03.12.2016
  • Почему вы заставляете цикл кода 1000 раз ждать 1 секунду на каждой итерации, заставляя его ждать в общей сложности 1000 секунд до истечения времени ожидания, если вы просто хотите, чтобы он ждал 5 секунд? 03.12.2016
  • 1000 циклов - это предположение за 5 секунд, моя цель - подождать 5 секунд, пока ребенок не закончит. Я не знаю как 03.12.2016

Новые материалы

Прогресс в технологии Трансформеров часть 3
Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

Приключения в Javascript, часть 1
Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

Понимание дженериков в TypeScript: подробное руководство
Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..