Elementy programowania systemowego - fork, exec, wait
Materiał do omówienia:
- kompilowanie programów:
- kompilator gcc/g++,
- kod pośredni (pliki *.o) i kompilacja projektów składających się z wielu plików,
- pliki nagłówkowe: po co one są, jak unikać wielokrotnej ich kompilacji,
- opcje: -o plik_wynikowy, -Wall, -c,
- pliki wymieniane do kompilacji,
- make i makefile:
- polecenie make, co to jest i po co to jest,
- jakie informacje make czerpie z pliku Makefile,
- przykładowy plik Makefile,
- trochę podstawowych zasad tworzenia plików Makefile (krótko),
- funkcje systemowe: fork, getpid, exit,
exec??? oraz wait i waitpid,
- pliki nagłówkowe:
- unistd.h - deklaracje fork, exec, itp.,
- sys/wait.h - deklaracje wait i waitpid,
- sys/types.h - deklaracje typów systemowych, np. pid_t,
- zwrócić uwagę na sposób przekazywania błędów z funkcji systemowych i ich obługę,
- funkcja system (wywołująca interpreter poleceń) i dlaczego jest ona mniej
efektywna niż fork+exec.
Przykładowe programy:
Proszę zgrać wszystkie pliki i skompilować je za pomocą make.
Ćwiczenia:
-
Zmodyfikuj program proc_fork.cpp tak, żeby
wypisywał "Będę procesem macierzystym", tworzył proces potomny,
proces potomny wypisywał "Jestem procesem potomnym", proces macierzysty
wypisywał "Mam proces potomny", czekał na zakonczenie procesu potomnego,
po czym wypisywał "Proces potomny się skończył".
-
Zmodyfikuj program proc_exec.cpp tak, żeby
wywoływał jakieś inne polecenie wraz z argumentami (np. ls -al).
-
Zmodyfikuj program proc_tree.cpp w taki sposób, żeby proces macierzysty czekał
na zakończenie każdego procesu potomnego, przed utworzeniem następnego procesu potomnego.
-
Zmodyfikuj program proc_tree.cpp w taki sposób, żeby
tworzył "linię" procesów, gdzie każdy proces potomny jest przodkiem następnego procesu.
Każdy proces macierzysty powinien czekac na zakonczenie swojego procesu potonego.
-
Zmodyfikuj program proc_tree.cpp w taki sposób, żeby
tworzył "drzewo" procesów.
Każdy proces macierzysty powinien czekac na zakonczenie swojego procesu potonego.
Jak liczba tworzonych procesów zależy od wartości stałej NR_PROC?
-
Dodaj do przykładowego interpretera poleceń możliwość wykonywania procesów w tle.
(Zaporowe!)
Literatura
- M. J. Rochkind, Programowanie w systemie UNIX dla zaawansowanych, rozdz. 5.3-5.7,
- M. J. Bach, Budowa systemu operacyjnego UNIX, rozdz. 7.1, 7.3-7.5.