Системное программирование в UNIX средствами Free Pascal



         

Описание


uses linux;

Function WaitPid(Pid:longint; Status:pointer; Options:Longint):Longint;

Первый аргумент pid определяет идентификатор дочернего процесса, завершения которого будет ожидать родительский процесс. Если этот аргумент установлен равным -1, а аргумент options установлен равным 0, то вызов waitpid ведет себя в точности так же, как и вызов wait, поскольку значение -1 соответствует любому дочернему процессу. Если значение pid больше нуля, то родительский процесс будет ждать завершения дочернего процесса с идентификатором процесса равным pid. Во втором аргументе status будет находиться статус дочернего процесса после возврата из вызова

waitpid.

Последний аргумент, options, может принимать константные значения, определенные в модуле linux. Наиболее полезное из них – константа WNOHANG. Задание этого значения позволяет вызывать waitpid в цикле без блокирования процесса, контролируя ситуацию, пока дочерний процесс продолжает выполняться. Если установлен флаг WNOHANG, то вызов waitpid будет возвращать 0 в случае, если дочерний процесс еще не завершился.

Функциональные возможности вызова waitpid с параметром

WNOHANG можно продемонстрировать, переписав предыдущий пример. На этот раз родительски процесс проверяет, завершился ли уже дочерний процесс. Если нет, он выводит сообщение, говорящее о том, что он продолжает ждать, затем делает секундную паузу и снова вызывает waitpid, проверяя, завершился ли дочерний процесс. Обратите внимание, что потомок получает свой идентификатор процесса при помощи вызова getpid. Об этом вызове расскажем в разделе 5.10.1.

(* Программа status2 - получение статуса завершения

 * дочернего процесса при помощи вызова waitpid

 *)

uses linux,stdio,crt;

var

  pid:longint;

  status, exit_status:integer;

begin

  pid := fork;

  if pid < 0 then

    fatal ('Ошибка вызова fork ');

  if pid = 0 then            (* потомок *)

  begin

    (* Вызов библиотечной процедуры sleep

     * для приостановки выполнения на 4 секунды




Содержание  Назад  Вперед