Skip to content

Latest commit

 

History

History
98 lines (75 loc) · 5.01 KB

README.md

File metadata and controls

98 lines (75 loc) · 5.01 KB

Управление процессами

Сборка и запуск

  1. Необходимо перейти в корневую директорию и выполнить команду для сборки проекта make

  2. Исполняемые файлы появятся в папке bin

  3. Для удаления всех объектных и исполняемых файлов необходимо выполнить команду make clean

Задания

Задание 1. Реализовать программу, которая порождает процесс. Родительский процесс и дочерний выводят на экран свои pid, ppid. Затем родительский ждет завершения дочернего и выводит его статус завершения.

Тестирование

Тест 1:

I'm a parent, my pid = 6219, ppid = 3142
I'm a child, my pid = 6220, ppid = 6219
6220 died with code 0

Тест 2:

I'm a parent, my pid = 6299, ppid = 3142
I'm a child, my pid = 6300, ppid = 6299
6300 died with code 0

Тест 3:

I'm a parent, my pid = 6305, ppid = 3142
I'm a child, my pid = 6306, ppid = 6305
6306 died with code 0

Задание 2. Реализовать программу, которая порождает процесс1 и процесс2, ждет завершения дочерних процессов. Процесс1 в свою очередь порождает процесс3 и процесс4 и ждет их завершения. Процесс2 порождает процесс5 и ждет его завершения. Все процессы выводят на экран свой pid, ppid.

Тест 1:

process0: pid = 8213, ppid = 3142
process1: pid = 8214, ppid = 8213
process2: pid = 8215, ppid = 8213
process3: pid = 8216, ppid = 8214
process5: pid = 8217, ppid = 8215
process4: pid = 8218, ppid = 8214
message from 1: process3 died (pid = 8216)
message from 2: process5 died (pid = 8217)
message from 1: process4 died (pid = 8218)
message from 0: process2 died (pid = 8215)
message from 0: process1 died (pid = 8214)

Тест 2:

process0: pid = 8318, ppid = 3142
process1: pid = 8319, ppid = 8318
process2: pid = 8320, ppid = 8318
process3: pid = 8321, ppid = 8319
process4: pid = 8322, ppid = 8319
message from 1: process3 died (pid = 8321)
process5: pid = 8323, ppid = 8320
message from 1: process4 died (pid = 8322)
message from 2: process5 died (pid = 8323)
message from 0: process1 died (pid = 8319)
message from 0: process2 died (pid = 8320)

Tip

Как можно заметить, процессы создаются и завершаются в довольно интересном порядке. Однако при этом в каждом случае соблюдается иерархия, описанная в задании, и процессы-родители терпеливо дожидаются завершения жизни своих детей. 😊

Задание 3. Реализовать аналог командного интерпретатора bash. При запуске программы пользователю предлагается ввести имя программы и опции запуска программы. Программа порождает процесс и в нем выполняет введенную программу с заданными опциями, ждет завершения дочернего процесса. Снова возвращается к вводу следующей программы. Выход из интерпретатора по команде exit.

Запустим исполняемый файл с названием task3. Протестируем перемещение между директориями, запуск системных утилит, собственных бинарных файлов. В случае некорректного ввода ошибки выводятся и программа ожидает ввода следющей команды:

Important

После выполнения задания на каналы была добавлена поддержка команд вида ls -la | grep a | ....

alexey@alexey-HVY-WXX9:~/Projects/Eltex/HW/process-management$ ./bin/task3
alexey@shell: /home/alexey/Projects/Eltex/HW/process-management$ cd bin
alexey@shell: /home/alexey/Projects/Eltex/HW/process-management/bin$ ls
task1  task2  task3
alexey@shell: /home/alexey/Projects/Eltex/HW/process-management/bin$ ps -A | grep task3
  22726 pts/10   00:00:00 task3
alexey@shell: /home/alexey/Projects/Eltex/HW/process-management/bin$ ./task1
I'm a parent, my pid = 22797, ppid = 22726
I'm a child, my pid = 22798, ppid = 22797
22798 died with code 0
alexey@shell: /home/alexey/Projects/Eltex/HW/process-management/bin$ exit
alexey@alexey-HVY-WXX9:~/Projects/Eltex/HW/process-management$