1. 2. Последовательность выполнения работы
1. 2. ПОСЛЕДОВАТЕЛЬНОСТЬ ВЫПОЛНЕНИЯ РАБОТЫ
1. Написание, компиляция и запуск программы с системными вызовами getpid() и getppid(). Наша программа (язык С):
Вывод программы:
2. Прогон программы с использованием вызова fork(), где порожденный процесс делает то же самое, что и родитель. Наша программа:
В процессе выполнения системного вызова fork() порождается копия родительского процесса и возвращение из системного вызова будет происходить уже как в родительском, так и в порожденном процессах. Этот системный вызов является единственным, который вызывается один раз, а при успешной работе возвращается два раза (один раз в процессе-родителе и один раз в процессе-ребенке)! После выхода из системного вызова оба процесса продолжают выполнение регулярного пользовательского кода, следующего за системным вызовом.
Результат выполнения программы:
3. Написание, компиляция и запуск программы с распечаткой значений переменных среды и аргументов командной строки.
Наша программа:
Результат выполнения программы:
4. Прогон программы с использованием системного вызова exec().
Задачей exec является замена текущего процесса на новый процесс. Отметьте использование слова заменить. Как только вы вызываете exec, текущий процесс завершается и начинается новый. Если вы хотите создать отдельный процесс, сначала вы должны вызвать fork, затем вызвать exec для новой программы в дочернем процессе. В программе ниже показан этот сценарий:
Результат выполнения программы:
5. Написание, компиляция и запуск программы для изменения пользовательского
контекста в порожденном процессе. 6. Написание, компиляция и запуск программы с использованием вызова fork() с разным поведением процессов ребенка и родителя.
Наша программа:
Результат выполнения программы:
Вывод:
Научились использовать опции для компиляции программ на языке С в UNIX и их запуск. Также изучили новые системные вызовы getuid() и getgid(), с помощью которых можно узнать номер пользователя и номер группы в системе.
Министерство образования и науки Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Южно-Уральский государственный университет» (национальный исследовательский университет) Институт естественных и точных наук Факультет математики, механики и компьютерных технологий Кафедра прикладной математики и программирования
ОТЧЕТ К ЛАБОРАТОРНОЙ РАБОТЕ №7 по дисциплине операционные системы
Челябинск 2019 ЛАБОРАТОРНАЯ РАБОТА № 7. Управление процессами и заданиями ЦЕЛЬ РАБОТЫ План занятия · Работа выполняется: на хостовой или виртуальной машине. · Навыки: работа с процессами, задачами, фоновый режим. · Изучаемые команды: ps, top, bg, fg, pstree, kill.
Практические работы 1. Выполните команды:
$ ps $ ps -u $ ps -ux $ ps -aux $ ps -e Найдите отличия в работе команды ps в зависимости от переданных аргументов.
2. Выведите список процессов в виде дерева: $ pstree
3. Для того, чтобы найти какой-либо процесс, используйте конвейер:
$ pstree | less В интерактивном режиме программы less напечатайте: /syslog и нажмите Enter. Выйдите из программы нажатием клавиши q
4. Bash обладает полезным свойством выполнять задачи в фоновом режиме, для этого после выполняемой команды нужно поставить символ амперсанд - " & ". Запустите команду. #: которая будет работать " вечно":
$ yes
5. Завершите команду, нажав сочетание Ctrl+C 6. Запустите эту же команду в фоновом режиме, перенаправив стандартный вывод:
$ yes > /dev/null &
7. Появится надпись вроде следующей: [1] 18335. В квадратных скобках указан номер задания, следом - PID процесса, который может не совпадать с примером. 8. Убедитесь при помощи команды jobs, что в фоне работает одна задача 9. Запустите ещё одну задачу:
$ yes n > /dev/null & И ещё одну: $ yes yes > /dev/null &
10. Откройте команду top и отметьте две запущенные ранее задачи, потребляющие больше всего ресурсов:
$ top
11. Уничтожьте одну из них, набрав в интерактивном режиме: k Здесь - идентификатор процесса, который можно посмотреть в команде top
12. Выполните выход из команды top клавишей q 13. Выясните PID остальных задач:
$ jobs -l
14. Уничтожьте одну из задач командой kill, используя полученный PID
$ kill
15. Уничтожьте оставшуюся задачу по номеру задания, используя команду:
$ kill % Здесь - номер задачи
16. Убедитесь, что в фоне теперь не выполняется ни одной задачи. 17. Существует ещё один метод перевода задачи в фоновый режим. Запустите команду:
$ yes > /dev/null
18. Остановите задачу, отправив ей сигнал HUP (для этого достаточно нажать сочетание клавиш Ctrl+Z). 19. Переведите остановленную задачу в фоновый режим:
$ bg
20. Откройте команду top и убедитесь, что процесс yes работает (занимает 100% процессорного времени) 21. Завершите команду yes, используя команду killall. Данная команда может остановить процесс по его имени:
$ killall yes
22. Проверьте состояние фоновых заданий, убедитесь, что в фоне нет ни одной задачи.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|