
- •«Операционные системы.Командный интерфейс» конспект лекций Тема 1. Введение. Содержание курса
- •Тема 2. Классификация режимов работы ос
- •Диалоговый пакетный
- •Тема 3. Виды нтерфейсов пользователя ос unix
- •Тема 4. Обобщенные принцпы построения современных ос
- •Тема 5. Состав ос unix
- •Тема 6. Среда для работы пользователя
- •Тема 7. Регистрация пользователя в системе
- •Тема 8. Группа коммуникационных команд
- •Тема 9. Группа вспомогательных команд
- •Тема 10. Перенаправление ввода-вывода
- •Файловая система unix
- •Тема 11. Файлы unix
- •Тема 12. Генерация имен файлов
- •Тема 13. Структура системы каталогов unix
- •Тема 14. Управление каталогами в unix
- •Тема 15. Команды поиска файлов в системе каталогов
- •Тема 16. Управление файлами
- •Тема 17. Управление правами доступа к файлам и каталогам
- •Здесь файл fil1.C, владельцем которого является пользова-
- •Тема 18. Конвееры и фильтры
- •Тема 19. Создание и редактирование текстовых файлов
- •Команды удаления текста
- •Введение в shell- программирование
- •Тема 20. Операторы – команды
- •В unix при написании операторов важное значение отводится
- •Тема 21. Управление локальными переменными
- •Тема 22. Подстановка значений переменных
- •Тема 23. Экспортирование локальных переменных в среду shell
- •Тема 24. Проверка условий
- •2. Сравнение числовых значений:
- •3. Сравнение строк:
- •If список_команд1
- •Тема 25. Построение циклов
- •Тема 26. Управление процессами в unix
- •Тема 27. Создание фоновых процессов
- •Тема 28. Управление приоритетами
- •Тема 29. Завершение процессов
- •Тема 30. Перехватывание сигналов
- •Тема 31. Сетевые средства unix
Тема 27. Создание фоновых процессов
При обычном запуске с терминала некоторой программы на исполнение (системной утилиты или прикладной задачи) интерпретатором shell создается привилегированный процесс, который все время связан со своим терминалом. Запуск следующего процесса может быть выполнен пользователем только после завершения текущего, т.е. при появлении приглашения '$' от интерпретатора.
В целях использования возможности параллельного выполнения программ в ОС UNIX отдельные задачи или задания пакетного режима могут быть запущены одновременно с заданиями диалогового режима.Для запуска фонового (параллельного с другими потомками) процесса в командную строку необходимо и достаточно последним символом добавить знак
& (амперсанд):
$ cc prog.c &
2388
$
Shell выводит номер этого процесса (PID) и разрешает ввод
следующей команды.
Фоновые процессы обладают некоторыми недостатками:
- не допускают ввода с клавиатуры;
-обеспечивают вывод на экран, но при этом нарушают целостность вывода диалогового процесса.
Общепринятый прием исключения влияния фонового вывода на интерактивную работу:
ком_строка>имя_файла.out &
ком_строка планирует задание для фонового режима
перенаправляет вывод вместо экрана в указанный файл головного каталога пользователя.
Пример:
$grep ааа* > grep.out &
194
$ps
PID TTY TIME CMD
194 tty5 0:02 grep
200 tty5 0:01 ps
Особенности работы с фоновым режимом:
выполняемая в фоновым режиме программа (команда), требующая стандартного ввода, должна читать его из файла с использованием перенаправленного ввода;
программа, выполняемая в фоновом режиме не может быть прервана <Ctrl*C>, т.к. она отсоединяется от клавиатуры и м.б. прекращена только с помощью команды kill или выходом из системы;
выход из системы exit надо выполнять два раза: для завершения фонового процесса и завершения основного процесса shell.
В случаях, когда фоновый процесс все же требует ввода данных с клавиатуры, то его надо временно перевести в оперативный режим, ввести данные, и вернуть опять в фоновый с помощью следующих команд:
fg %N - перевод фонового процесса в оперативный;
bg %N - перевод оперативного в фоновый режим.
Здесь N – порядковый номер фонового задания, которое в общем случае может содержать несколько активных процессов и все они переводятся в соответствующий режим.
Номер задания “N” выводится:
при запуске фоновой программы
командой jobs без приостановленя или с приостановлением фонового процесса.
Приостановить выполнение процесса с выходом в shell (например для анализа состояния и результатов работы процедуры) можно с помощью прерывания-
<ctrl*Z>
$
с последующим запуском приостановленного процесса.
Пример.
$inf>f.out& - запуск процедуры inf в фоновом режиме
[1] 1754 - номер задания и идентификатор процесса
$jobs
%1 - номер задания
<ctrl*Z>
[1]+stopped inf>f.out
$bg %1 - запуск на продолжение в фоновом режиме
[1] inf>f.out
Выполнение фоновых заданий прекращается с выходом пользователя из системы. НО! Если фоновая программа должна быть продолжена и после прекращения текущего сеанса работы, то необходимо использовать команду:
$nohup имя_фоновой_программы & команда запускает и защищает фоновую программу от прерываний, вырабатываемых при выходе пользователя из системы, а также 2) перенаправляетфоновый протокол в системный файл nohup.out.
Вместе с тем, вывод протокола работы фоновой программы можно перенаправить в специальный файл, который просмотреть позже без нарушения протокола работы с оперативной задачей:
$nohup имя_фон_программы>имя_файла&
Рассмотрим два случая применения команды nohup.
Первый пример, где nohup перенаправляет протокол в указангный файл :
$nohup cat * > outfile &
[1] 972
$exit - завершается работа оперативного процесса
Повторный вход в систему:
login:
password:
$ps -af|grep cat - конвеер, выделяется строка с шаблоном cat
UID PID PPID CMD
lev 972 1 cat *>outfile &
$
В примере "процесс идет", nohup становится самостоятельным процессом и его PPID меняется - родительским процессом был sh (см. примеры выше), а стал init c PID=1, т.е. приоритет фонового процесса "усиливается" общесистемным процессом init и его выполнение будет продолжаться.
Примечание: в поле CMD может не указываться имя процедуры, а выводиться имя текущей утилиты этой процедуры, дентифицировать процедуру лучше по PID.
Если перенаправление протокола не использовать, то вывод автоматически осуществляется в систеный файл nohup.out, создаваемый системой в головном каталоге пользователя HOME.
Второй пример:
$nohup find / -user lev -type f &
[1] 2301
<сообщение о выводе в nohup.out>
$cd - переход в HOME
$cat nohup.out
<протокол команды find>
$
Команда nohup позволяет таким образом предупредить вывод на экран протокола фонового задания с прерыванием протокола работы оперативного процесса.
Пример: в чем разница в выполнении командных строк?
$PR;pr2;pr3 & - в фоновом режиме выполняется только pr3
$(PR1;pr2;pr3) & - в фоновом режиме выполняются все программы (подстановка опции & перед выполнением каждой программы из списка).