Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы терминал / Terminal_KR_Gorodetskiy_BST2154_v2 .docx
Скачиваний:
21
Добавлен:
28.10.2024
Размер:
12.75 Mб
Скачать
  1. Системные вызовы вашей̆ программы.

Составление двух программ:

  • start.sh – ведущая запись мониторинга вызовов целевой программы;

  • typer.sh – простая программа (typer.sh), которая делает суммарно пять записей в текстовом файле с интервалом в 1 секунду.

К сожалению, получить PID другого bash скрипта только по имени файла, из которого он был запущен, напрямую в bash невозможно. Вот почему: Bash не хранит эту информацию – Bash не отслеживает, из какого файла был запущен скрипт, кроме того, он может быть запущен просто как команда в командной строке, без запуска из файла.

Примененное решение: использован механизм именных каналов (named pipes) для передачи данных между скриптами. В первом скрипте мосоздан именованный канал, в другом - записан в него PID, а в первом чтение его.

Программа start.sh запускается с правами суперпользователя для доступа к вызовам запроса strace -p $typerpid -s 1024 -T -o exfile 2>&1. Из этой программы запускается typer.sh, в результате работы обеих программ остаются два новых текстовых файла:

exfile – в нем сохранен вывод команды strace;

lines – в нем можно посмотреть на записанные программой typer.sh строки.

Для Контроля работы программ, в терминал выводятся их PID для ручного завершения процесса в случае ошибок, также в текстовые файлы пишется вывод команды date для проверки.

Рисунок 4-3-9. Исходные коды написанных скриптов start.sh и typer.sh.

Рисунок 4-3-10. Результаты работы написанных скриптов start.sh и typer.sh: два новых текстовых файла: exfile и lines.

Рисунок 4-3-11. Содержимое файла lines.

Рисунок 4-3-12. Фрагмент содержимого файла exfile.

Выполнен разбор системных вызовов для программы typer.sh.

Таблица 4. Результаты анализа

Системный вызов

Описание вызова

Входные параметры

Время выполнения, мкс

Возвращаемое значение

1.

rt_sigprocmask

Устанавливает или получает маску сигналов

SIG_BLOCK, [CHLD], [], 8

0.000007

0

2.

clone

Создает новый процесс (клонирует текущий)

hild_stack=NULL, flags=CLONE_CHILD_CLEARTID| CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x741dde75ba10

0.001052

3086

3.

wait4

Ожидание завершения процесса

1, {WIFEXITED(s) && WEXITSTATUS(s) == 0}, 0, NULL

1.000251

3089

4.

ioctl

Управление устройством

2, TIOCGWINSZ, {wsrow=55, wscol=137, wsxpixel=640, wsypixel=480}

0.000008

0

5.

rt_sigr-eturn

Возврат из обработчика сигнала

{mask=}

0.000008

0

6.

rt_sigaction

Установка обработчика сигнала

SIGINT, {sahandler=0x5847f0913540, samask=, saflags=SARESTORER, sarestorer=0x741dde445320}, {sahandler=0x5847f08ed750, samask=[], saflags=SARESTORER, sarestorer=0x741dde445320}, 8

0.000008

0

  • wait4 - Этот системный вызов используется для ожидания завершения процесса. Он может использоваться для ожидания завершения конкретного процесса (с указанием PID) или для ожидания завершения любого дочернего процесса.

  • ioctl - Системный вызов для взаимодействия с устройствами. В этом случае он используется для получения информации о размере окна терминала.

  • clone - Системный вызов для создания нового процесса.

  • rt_sigaction - Системный вызов используется для установки обработчиков сигналов.

  • rt_sigprocmask - Системный вызов для управления маской сигналов.

  • rt_sigreturn - Системный вызов для возврата из обработчика сигнала.

Некоторые системные вызовы, такие как rt_sigaction и rt_sigprocmask, могут вызываться несколько раз в течение короткого периода времени. Время выполнения каждого вызова может отличаться в зависимости от используемого оборудования и нагрузки на систему.