
- •Список сокращений
- •Введение
- •Понятие процесса
- •Взаимодействие пользователя с процессами
- •Информация о процессах
- •Иерархия процессов
- •Запуск процессов
- •Завершение процессов
- •Межпроцессное взаимодействие
- •Механизмы информационного обмена
- •Сигналы;
- •Сигналы
- •Неименованные каналы
- •Именованные каналы
- •Упражнения
- •Начало работы
- •Подготовка
- •Изучение процессов
- •Запуск и завершение процессов в командной оболочке:
- •Межпроцессное взаимодействие в командной оболочке
- •Межпроцесное взаимодействие
- •Сигналы в Linux
- •Индивидуальные задания
- •Контрольные вопросы
- •Список литературы
- •Приложение 1. Справка по используемым утилитам
- •Регулярные выражения
- •Утилита xargs
- •Утилита wc
- •Утилита awk
- •Приложение 2. Листинги используемых программ
Рассмотрим пример работы с именованными каналами:
Создадим именованный канал с помощью команды «mkfifo»
mkfifo named_pipe
Запишем сообщение в именованный канал. Обратите внимание, что командная оболочка заблокирована.
echo "Hi" > named_pipe
Прочитайте данные из именованного канала в другом терминале. Убедитесь, что данные были прочитаны и произошла разблокировка первого терминала с командой записи в канал.
cat named_pipe
Межпроцесное взаимодействие
Запустите writer.sh. Данный исполняемый файл с периодом в 1 секунду выводит на экран сообщение, переданное как первый аргумент командной строки. Чтобы завершить работу исполняемого файла, нажмите Ctrl+C.
./writer.sh Hello!
Запустите reader.sh. Данный исполняемый файл читает введенное с клавиатуры сообщение и выводит его на экран. Чтобы завершить работу исполняемого файла, нажмите Ctrl+C.
./reader.sh
Соедините два исполняемых файла с помощью неименованного канала. Обратите внимание, что сообщение печатает reader.sh.
./writer.sh Hello! | ./reader.sh
Соедините два исполняемых файла с помощью именованного канала named_pipe, созданного в п.4.5.2.1. Для этого запустите в одной командной оболочке исполняемый файл с записью, во второй – с чтением.
Первая командная оболочка
Вторая командная оболочка
./writer.sh Hello! >named_pipe
./reader.sh < named_pipe
Прервите исполнение исполняемых файлов с помощью комбинации Ctrl+C. Аналогично пункту 4.5.3.4 запустите исполняемый файл reader.sh. В соседней командной оболочке запустите два экземпляра writer.sh в фоновом режиме.
Первая командная оболочка
Вторая командная оболочка
./writer.sh Hello > named_pipe &
./writer.sh world! > named_pipe &
./reader.sh < named_pipe
Сигналы в Linux
Завершите выполнение процессов sleep.sh в фоновом режиме с помощью утилиты kill:
|
kill %1 kill -9 %3 kill -9 %4 kill -9 %5 |
|
На экране появится сообщение для каждого процесса о том, что он был завершен. Для процесса [1] сообщение будет "Terminated" (отправлен сигнал SIGTERM), а для процессов [3-5] сообщение будет "Killed" (отправлен сигнал SIGKILL)
Запустите writer.sh.
./writer.sh Hello!
Из второй командной оболочки отправьте сигнал остановки процесса (сигнал SIGSTOP, №19). Чтобы получить PID writer.sh, с помощью утилиты ps находятся все запущенные процессы, далее с помощью grep выделяется строчка с writer.sh и производится вывод первого слова данной строки – номера PID.
|
kill -19 $(ps -a | grep writer.sh | awk '{print $1}') |
|
Убедитесь, что выполнение исполняемого файла было приостановлено.