Системный вызов Waitpid на C

Системный вызов Waitpid на C Программирование и разработка

Системный вызов waitpid () следит за ребенком процесса вызывающего абонента для государственных изменений и извлекает информацию о ребенке, чье поведение изменилось. Ребенок был остановлен сигналом или возобновлен сигналом, рассматриваемым как сдвиг состояния. Ожидание завершенного дочернего элемента позволяет системе освободить ресурсы, связанные с дочерним элементом; если ожидание не выполняется, прекращенный ребенок останется в состоянии » зомби «.

Системная функция waitpid () приостанавливает текущий процесс, пока PID аргумент не определяет ребенок, который изменился. Вызывающий процесс приостанавливается до завершения или завершения дочернего процесса. Waitpid () останавливает процесс вызова до тех пор, пока система не получит информацию о статусе ребенка. Waitpid () быстро возвращается, если система уже имеет информацию о состоянии подходящего дочернего элемента при его вызове. Если вызывающий процесс получает сигнал с действием либо выполнения обработчика сигнала, либо завершения процесса, waitpid () завершается. Функция waitpid () приостанавливает выполнение вызывающего потока до тех пор, пока он не получит информацию и обновления для одного из завершенных дочерних процессов или сигнала, который либо запустит процедуру перехвата сигнала, либо не завершит процесс.

Пример 1

Мы собираемся более подробно остановиться на нашем первом примере в терминале операционной системы Ubuntu 20.04. Создайте файл с помощью команды nano в консоли, как показано ниже. Выбор имени файла полностью зависит от вас.

nano wait.c

Вы можете проверить, появился ли файл в редакторе GNU nano. Просто введите код, показанный на прикрепленном изображении.

Вы можете проверить, появился ли файл в редакторе GNU nano

В этом примере мы использовали цикл for для увеличения процесса. Был использован системный вызов Fork (). Системного вызова вилка () используется, чтобы начать новый процесс, известный как дочерний процесс, который проходит параллельно с тем, который сделал вызов вилкой () в родительском процессе. После того, как системный вызов fork () создаст новый дочерний процесс, все процессы выполнят следующую инструкцию. Он не принимает никаких входных данных и возвращает целочисленное значение. После этого использовалась функция сна.

Читайте также:  Что такое переменные среды Bash

Функция sleep () приостанавливает работу вызывающего потока до тех пор, пока не пройдет диапазон секунд реального времени, предоставленный параметром seconds, или пока вызывающему потоку не будет передан сигнал с действием вызова функции захвата сигнала или завершения процесс. Мы добавили «1» в качестве аргумента. WIFEXITED проверяет статус завершения дочернего процесса, возвращаемый методами wait и waitpid (), чтобы узнать, был ли дочерний процесс завершен успешно.

В основной функции этой программы был вызван системный вызов wait

В основной функции этой программы был вызван системный вызов wait (). Как только вы поймете этот код, сохраните и выйдите из файла и вернитесь в терминал. Напишите прилагаемые ниже инструкции для выполнения кода. Мы использовали компилятор GCC в операционной системе Ubuntu 20.04.

gcc wait.c

$ ./a.out

Результат можно увидеть на прикрепленном изображении.

увидеть на прикрепленном изображении

Пример 2

Мы собираемся более подробно остановиться на нашем втором примере в терминале операционной системы Ubuntu 20.04. Создайте файл с помощью команды nano в консоли, как показано ниже. Выбор имени файла полностью зависит от вас.

nano waitpid.c

Вы можете проверить, появился ли файл в редакторе GNU nano. Просто введите код, показанный на прикрепленном изображении.

В показанном выше коде снова использовался системный вызов fork

В показанном выше коде снова использовался системный вызов fork (). Целью системного вызова fork () является запуск нового процесса, известного как дочерний процесс, который выполняется параллельно с тем, который вызвал fork () родительский процесс. После того, как системный вызов fork () создаст новый дочерний процесс, все процессы выполнят следующую инструкцию. Он не принимает никаких входных данных и возвращает целочисленное значение. EXIT_FAILURE означает неэффективное выполнение программы. Функция pause () будет ждать сигналов.

Если дочерний процесс остановился, но не был

Если дочерний процесс остановился, но не был отслежен с помощью системного вызова ptrace (), WUNTRACED вернется. Хотя этот параметр не выбран, предоставляется статус отслеживаемых детей, которые остановились. WCONTINUED возвращается, если остановленный дочерний элемент был перезапущен широковещательной передачей SIGCONT. WEXITSTATUS (status) предоставляет статус выхода ребенка. Если WIFEXITED возвращает истину, следует использовать только это выражение. Частота сигнала, побудившего дочерний процесс завершиться, возвращается WTERMSIG (статус). Если WIFSIGNALED дал «истина», следует использовать только это выражение.

Читайте также:  Ansible или Chef: какой инструмент управления конфигурацией лучше?

Номер сигнала, который побудил ребенка остановиться, возвращается WSTOPSIG (статус). Если WIFSTOPPED возвращает истину, следует использовать только это выражение. WIFSIGNALED (status) возвращает истину, если сигнал завершил дочерний процесс. Как только вы поймете этот код, сохраните и выйдите из файла и вернитесь в терминал. Напишите прилагаемые ниже инструкции для выполнения кода. Мы использовали компилятор GCC в операционной системе Ubuntu 20.04.

gcc waitpid.c

$ ./a.out

Результат можно увидеть на прикрепленном изображении.

Заключение

Это руководство было посвящено использованию системного вызова waitpid () в программировании на C. Мы привели два примера. Один из них более простой и легкий. Как только вы поймете это, вы легко сможете перейти к более сложному. Выполните оба примера в своей системе, чтобы вам было легче испытать использование системного вызова waitpid () в программировании на C.

Оцените статью
bestprogrammer.ru
Добавить комментарий