Jump to content

подожди (системный вызов)

(Перенаправлено с Waitpid() )

В компьютерных операционных системах процесс задача (или ) может ожидать завершения другого процесса. В большинстве систем родительский процесс может создавать независимо выполняющийся дочерний процесс . Родительский процесс может затем выполнить ожидания системный вызов , который приостанавливает выполнение родительского процесса, пока выполняется дочерний процесс. Когда дочерний процесс завершается, он возвращает статус завершения операционной системе, который затем возвращается ожидающему родительскому процессу. Затем родительский процесс возобновляет выполнение. [1]

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

Операционная система может предоставлять варианты вызова ожидания , которые позволяют процессу ожидать выхода любого из своих дочерних процессов или одного конкретного дочернего процесса (идентифицированного его идентификатором процесса выхода ).

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

Статус завершения, возвращаемый дочерним процессом, обычно указывает, завершился ли процесс нормально или ненормально . Для нормального завершения этот статус также включает код завершения (обычно целочисленное значение), который процесс вернул системе. В течение первых 20 лет существования UNIX ожидающему родителю были доступны только младшие 8 бит кода выхода. В 1989 году с СВР4 , [ нужна ссылка ] новый идентификатор ожидания Был введен вызова, который возвращает все биты из вызова выхода в структуре с именем siginfo_t в члене структуры si_status . [ нужна ссылка ] Waitid является обязательной частью стандарта POSIX с 2001 года.

Зомби и сироты

[ редактировать ]

Когда дочерний процесс завершается, он становится процессом-зомби и продолжает существовать как запись в таблице системных процессов, даже если он больше не является активно исполняемой программой. При нормальной работе его обычно немедленно ожидает его родительский элемент, а затем система использует его, возвращая ресурс (запись в таблице процессов). Если родительский элемент не ожидает дочернего процесса, он продолжает потреблять этот ресурс неопределенно долго, и, таким образом, происходит утечка ресурсов . Такие ситуации обычно решаются с помощью специального процесса «жнеца». [ нужна ссылка ] который находит зомби и получает их статус выхода, позволяя операционной системе затем освободить их ресурсы.

И наоборот, дочерний процесс, родительский процесс которого завершается раньше, становится потерянным процессом . Такие ситуации обычно обрабатываются с помощью специального «корневого» (или «init») процесса, который назначается новым родительским процессом при выходе из родительского процесса. Этот специальный процесс определяет, когда потерянный процесс завершается, а затем получает статус его завершения, позволяя системе освободить завершенный дочерний процесс.

Если дочерний процесс получает сигнал, ожидающий родительский процесс продолжит выполнение, оставив потерянный процесс позади. [ нужна ссылка ] Следовательно, иногда необходимо проверить аргумент, установленный с помощью wait, waitpid или waitid, и, в случае, если WIFSIGNALED имеет значение true, дождаться, пока дочерний процесс снова освободит ресурсы. [ нужна ссылка ]

См. также

[ редактировать ]
  1. ^ «Подождать системный вызов в C» . Гики для Гиков . 03.06.2017 . Проверено 15 мая 2023 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0e6d28f9de02781261f84b3f2671c0d2__1684390140
URL1:https://arc.ask3.ru/arc/aa/0e/d2/0e6d28f9de02781261f84b3f2671c0d2.html
Заголовок, (Title) документа по адресу, URL1:
wait (system call) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)