Добавил:
github.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
11
Добавлен:
30.09.2023
Размер:
875.49 Кб
Скачать
      1. Рассмотрим пример работы с именованными каналами:

        1. Создадим именованный канал с помощью команды «mkfifo»

          mkfifo named_pipe

        2. Запишем сообщение в именованный канал. Обратите внимание, что командная оболочка заблокирована.

          echo "Hi" > named_pipe

        3. Прочитайте данные из именованного канала в другом терминале. Убедитесь, что данные были прочитаны и произошла разблокировка первого терминала с командой записи в канал.

          cat named_pipe

      2. Межпроцесное взаимодействие

        1. Запустите writer.sh. Данный исполняемый файл с периодом в 1 секунду выводит на экран сообщение, переданное как первый аргумент командной строки. Чтобы завершить работу исполняемого файла, нажмите Ctrl+C.

          ./writer.sh Hello!

        2. Запустите reader.sh. Данный исполняемый файл читает введенное с клавиатуры сообщение и выводит его на экран. Чтобы завершить работу исполняемого файла, нажмите Ctrl+C.

          ./reader.sh

        3. Соедините два исполняемых файла с помощью неименованного канала. Обратите внимание, что сообщение печатает reader.sh.

          ./writer.sh Hello! | ./reader.sh

        4. Соедините два исполняемых файла с помощью именованного канала named_pipe, созданного в п.4.5.2.1. Для этого запустите в одной командной оболочке исполняемый файл с записью, во второй – с чтением.

          Первая командная оболочка

          Вторая командная оболочка

          ./writer.sh Hello! >named_pipe

          ./reader.sh < named_pipe

        5. Прервите исполнение исполняемых файлов с помощью комбинации Ctrl+C. Аналогично пункту 4.5.3.4 запустите исполняемый файл reader.sh. В соседней командной оболочке запустите два экземпляра writer.sh в фоновом режиме.

          Первая командная оболочка

          Вторая командная оболочка

          ./writer.sh Hello > named_pipe &

          ./writer.sh world! > named_pipe &

          ./reader.sh < named_pipe

      3. Сигналы в Linux

        1. Завершите выполнение процессов sleep.sh в фоновом режиме с помощью утилиты kill:

kill %1

kill -9 %3

kill -9 %4

kill -9 %5

На экране появится сообщение для каждого процесса о том, что он был завершен. Для процесса [1] сообщение будет "Terminated" (отправлен сигнал SIGTERM), а для процессов [3-5] сообщение будет "Killed" (отправлен сигнал SIGKILL)

        1. Запустите writer.sh.

          ./writer.sh Hello!

        2. Из второй командной оболочки отправьте сигнал остановки процесса (сигнал SIGSTOP, №19). Чтобы получить PID writer.sh, с помощью утилиты ps находятся все запущенные процессы, далее с помощью grep выделяется строчка с writer.sh и производится вывод первого слова данной строки – номера PID.

kill -19 $(ps -a | grep writer.sh | awk '{print $1}')

Убедитесь, что выполнение исполняемого файла было приостановлено.

Соседние файлы в папке OS_labs