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



         

Описание - часть 3


Программа ps

сильно привязана к конкретной системе. Это связано с тем, что она напрямую обращается к ядру (через специальный файл, представляющий образ системной памяти) для получения системной таблицы процессов. На системе, использованной при разработке этого примера, команда ps

имеет синтаксис

$ ps -t ttyname

где ttyname является именем специального файла терминала в каталоге /dev, например, tty1, console, pts/8 и др. Выполнение этой команды ps

дает следующий вывод:

PID TTY TIME  COMMAND

29  со  0:04  sh

39  со  0:49  vi

42  со  0:00  sh

43  со  0:01  ps

Первый столбец содержит идентификатор процесса. Второй – имя терминала, в данном случае со

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

(* Программа unfreeze - освобождение терминала *)

uses stdio,linux,strings;

const

  LINESZ =150;

  SUCCESS=0;

  ERROR  =(-1);

const

  killflag:integer=0;

  (* Инициализация этой переменной зависит от вашей системы *)

  pspart:pchar = 'ps t ';

  fmt:pchar = '%d %*s %*s %*s %s';

var

  comline, inbuf, header, name:array [0..LINESZ-1] of char;

  f:pfile; 

  j:integer;

  pid:longint;

begin

  if paramcount <2 then

  begin

    writeln (stderr, 'синтаксис: ',paramstr(0),' терминал программа ...');

    halt (1);

  end;

  (* Сборка командной строки *)

  strcopy (comline, pspart);

  strcat (comline, argv[1]);

  (* Запуск команды ps *)

  f := pipeopen (comline, 'r');

  if f = nil then

  begin

    writeln (stderr, paramstr(0),': не могу запустить команду ps ');

    halt (2);

  end;

  (* Получить первую строку от ps и игнорировать ее *)

  if fgets (header, LINESZ, f) = nil then

  begin

    writeln (stderr, paramstr(0),': нет вывода от ps?');

    halt (3);




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