Code Monkey home page Code Monkey logo

otus-task10's Introduction

#Домашнее задание: работаем с процессами

Задания на выбор:

написать свою реализацию ps ax используя анализ /proc Результат ДЗ - рабочий скрипт который можно запустить написать свою реализацию lsof Результат ДЗ - рабочий скрипт который можно запустить дописать обработчики сигналов в прилагаемом скрипте, оттестировать, приложить сам скрипт, инструкции по использованию Результат ДЗ - рабочий скрипт который можно запустить + инструкция по использованию и лог консоли реализовать 2 конкурирующих процесса по IO. пробовать запустить с разными ionice Результат ДЗ - скрипт запускающий 2 процесса с разными ionice, замеряющий время выполнения и лог консоли реализовать 2 конкурирующих процесса по CPU. пробовать запустить с разными nice Результат ДЗ - скрипт запускающий 2 процесса с разными nice и замеряющий время выполнения и лог консоли


Решение:

Решил объединить два скрипта в один - сделать 2 конкурирующих процесса и по CPU, и по IO. Параметры для запуска скрипт берёт из файла script_nice_ionice.conf.

Текст скрипта:

#!/bin/bash

# Прочитаем переменные из файла конфигурации
source script_nice_ionice.conf

# Получаем имена временных файлов, но не создём их. Далее с такими именами сделаем именованные каналы.
FIFO_ETALON=$(mktemp -u)
FIFO_ETALON_CPU=$(mktemp -u)
FIFO_TEST=$(mktemp -u)
FIFO_TEST_CPU=$(mktemp -u)


# Создаём файлы именованных каналов
mkfifo "$FIFO_ETALON" "$FIFO_TEST" "$FIFO_ETALON_CPU" "$FIFO_TEST_CPU"

#Создадим тестовые файлы
FILE01="$TEST_DIR/FILE01"
FILE02="$TEST_DIR/FILE02"

#Включим ловушку, чтобы удалить временные файлы если скрипт завершится с ошибкой
trap 'rm -f "$FIFO_ETALON" "$FIFO_TEST" "$FIFO_ETALON_CPU" "$FIFO_TEST_CPU" "$FILE01" "$FILE02"' INT TERM EXIT

( (LANG=en_EN dd if=/dev/urandom of="$FILE01" oflag=direct bs="$BS" count="$COUNT" 2>&1) | tee "$FIFO_ETALON" > /dev/null)& PID_FIFO_ETALON=$!
( (LANG=en_EN nice -n"$NICE" ionice -c"$IONICECLASS" -n"$IONICE" dd if=/dev/urandom of="$FILE02" oflag=direct bs="$BS" count="$COUNT" 2>&1) | tee "$FIFO_TEST" > /dev/null)& PID_FIFO_TEST=$!


# Сообщим параметры запуска скрипта
echo "Эталонный процесс запущен без указания параметров nice и ionice."
echo "Второй процесс запущен с параметрами nice: -n $NICE и ionice -c$IONICECLASS -n$IONICE"

# Сохраним результаты работы процессов в переменные
RESULT_ETALON=$(grep "copied" "$FIFO_ETALON")
RESULT_TEST=$(grep "copied" "$FIFO_TEST")

# Ожидаем заверешение запущенных процессов
wait $PID_FIFO_ETALON $PID_FIFO_TEST

( (LANG=en_EN time dd if=/dev/urandom bs="$BS" count="$COUNT" | md5sum) 2>&1 | tee "$FIFO_ETALON_CPU" > /dev/null)& PID_FIFO_ETALON_CPU=$!
( (LANG=en_EN time nice -n"$NICE" ionice -c"$IONICECLASS" -n"$IONICE" dd if=/dev/urandom bs="$BS" count="$COUNT" | md5sum) 2>&1 | tee "$FIFO_TEST_CPU" > /dev/null)& PID_FIFO_TEST_CPU=$!

# Сохраним результаты работы процессов в переменные
RESULT_ETALON_CPU=$(grep "elapsed" "$FIFO_ETALON_CPU")
RESULT_TEST_CPU=$(grep "elapsed" "$FIFO_TEST_CPU")

# Ожидаем заверешение запущенных процессов
wait $PID_FIFO_ETALON_CPU $PID_FIFO_TEST_CPU

# Сообщим результат работы скрипта
echo "Эталонный результат: ${RESULT_ETALON#*copied, }"
echo "Тестовый результат: ${RESULT_TEST#*copied, }"
echo "Эталонный результат ЦПУ: ${RESULT_ETALON_CPU#*elapsed, }"
echo "Тестовый результат ЦПУ: ${RESULT_TEST_CPU#elapsed, }"

# Удалим временные файлы
rm -f "$FIFO_ETALON" "$FIFO_TEST" "$FIFO_ETALON_CPU" "$FIFO_TEST_CPU" "$FILE01" "$FILE02"

otus-task10's People

Contributors

nargamard avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.