-
Необходимо перейти в корневую директорию и выполнить команду для сборки проекта
make
-
Исполняемые файлы появятся в папке
bin
-
Для удаления всех объектных и исполняемых файлов необходимо выполнить команду
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$