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


. Идентификатор процесса


Как уже отмечено в начале этой главы, система присваивает каждому процессу неотрицательное число, которое называется идентификатором процесса. В любой момент времени идентификатор процесса является уникальным, хотя после завершения процесса он может использоваться снова для другого процесса. Некоторые идентификаторы процесса зарезервированы системой для особых процессов. Процесс с идентификатором 0, хотя он и называется планировщиком (scheduler), на самом деле является процессом подкачки памяти (swapper). Процесс с идентификатором 1 – это процесс инициализации, выполняющий программу /etc/init. Этот процесс, явно или неявно, является предком всех других процессов в системе UNIX.

Программа может получить свой идентификатор процесса при помощи следующего системного вызова:

pid := getpid;

Аналогично вызов getppid возвращает идентификатор родителя вызывающего процесса:

ppid := getppid;

Например:

Uses linux;

begin

  Writeln ('Process Id = ',getpid,' Parent process Id = ',getppid);

end.

Следующая процедура gentemp использует вызов getpid для формирования уникального имени временного файла. Это имя имеет форму:

/tmp/tmp<pid>.<no>

Суффикс номера <nо> увеличивается на единицу при каждом вызове процедуры gentemp. Процедура также вызывает функцию access, чтобы убедиться, что файл еще не существует:

uses linux,strings;

 

const

  num:integer=0;

  namebuf:array [0..19] of char='';

  prefix='/tmp/tmp';

 

function gentemp:pchar;

var

  length:integer;

  pid:longint;

begin

  pid := getpid;       (* получить идентификатор процесса *)

 

  (* Стандартные процедуры работы со строками *)

  strcopy (namebuf, prefix);

  length := strlen (namebuf);

 

  (* Добавить к имени файла идентификатор процесса *)

  itoa (pid, @namebuf[length]);

  strcat (namebuf, '.');

  length := strlen (namebuf);

  repeat

    (* Добавить суффикс с номером *)

    itoa(num, @namebuf[length]);

    inc(num);

  until(not access (namebuf, F_OK));




- Начало -  - Назад -  - Вперед -



Книжный магазин