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


         

Поиск программы, которую нужно завершить


  end;
  (* Поиск программы, которую нужно завершить *)
  while fgets (inbuf, LINESZ, f) <> nil do
  begin
    if sscanf (inbuf, fmt, [@pid, pchar(name)]) < 2 then
      break;
    for j := 2 to argc-1 do
    begin
      if strcomp (name, argv[j]) = 0 then
      begin
        if dokill (pid, inbuf, header) = SUCCESS then
          inc(killflag);
      end;
    end;
  end;
  (* Это предупреждение, а не ошибка *)
  if killflag=0 then
    writeln(stderr, paramstr(0),': работа программы не завершена ',
            paramstr(1));
  pipeclose(f);
  halt (0);
end.
Ниже приведена реализация процедуры dokill, вызываемой программой unfreeze. Обратите внимание на использование процедуры readln для чтений первого не пробельного символа (вместо нее можно было бы использовать и функцию
yesno, представленную в разделе 11.8).
(* Получить подтверждение, затем завершить работу программы *)
function dokill(procid:longint;line,hd:pchar):integer;
var
  c:char;
begin
  writeln (#$a'Найден процесс, выполняющий заданную программу :');
  writeln (#9,hd,#9,line);
  writeln ('Нажмите `y` для завершения процесса ', procid);
  write (#$a'Yes\No? > ');
  (* Введите следующий не пробельный символ *)
  readln (c);
  if (c = 'y') or (c = 'Y') then
  begin
    kill (procid, SIGKILL);
    dokill:=SUCCESS;
    exit;
  end;
  dokill:=ERROR;
end;
Упражнение 11.9. Напишите свою версию процедуры getcwd, которая возвращает строку с именем текущего рабочего каталога. Назовите вашу программу wdir. Совет: используйте стандартную команду pwd.
Упражнение 11.10. Напишите программу arrived, которая запускает программу who при помощи процедуры popen для проверки (с 60-секундными интервалами), находится ли в системе пользователи из заданного списка. Список пользователей должен передаваться программе arrived в качестве аргумента командной строки. При обнаружении кого-нибудь из перечисленных в списке пользователей, программа arrived должна выводить сообщение. Программа должна быть достаточно эффективной, для этого используйте вызов sleep между выполнением проверок. Программа who должна быть описана в справочном руководстве системы.

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