Procesy ======= Tworzenie procesu ----------------- `Listing 3.1 `_: Przykład działania funkcji :func:`fork` (str. 16) .. literalinclude:: przyklad_fork.c Uruchamianie programu --------------------- `Listing 3.2 `_: Przykład działania funkcji :func:`exec` (str. 17) .. literalinclude:: przyklad_exec.c Synchronizacja przodka z potomkiem ---------------------------------- `Listing 3.3 `_: Przykład uruchamiania programów bez synchronizacji przodka z potomkiem (str. 17) .. literalinclude:: przyklad_fork_exec.c `Listing 3.4 `_: Przykład uruchamiania programów z synchronizacja przodka z potomkiem (str. 18) .. literalinclude:: przyklad_fork_exec_wait.c `Listing 3.5 `_: Przykład uruchamiania programów z kontrolą poprawności (str. 18) .. literalinclude:: przyklad_fork_exec_wait2.c `Listing 3.6 `_: Przykład działania funkcji :func:`wait` w przypadku naturalnego zakończenia procesu (str. 19) .. literalinclude:: przyklad_wait.c `Listing 3.7 `_: Przykład działania funkcji :func:`wait` w przypadku zabicia procesu (str. 19) .. literalinclude:: przyklad_wait_kill.c Przeadresowanie standardowego wyjścia ------------------------------------- `Listing 3.8 `_: Przykład przeadresowania standardowego wyjścia (str. 20) .. literalinclude:: przyklad_stdout.c Sierota i zombi --------------- `Listing 3.9 `_: Utworzenie *sieroty* (str. 20) .. literalinclude:: program_orphan.c `Listing 3.10 `_: Utworzenie *zombi* (str. 21) .. literalinclude:: program_zombi.c Zadania ------- 1. Jaki będzie wynik wykonania programu z listingu 3.1, jeśli zamiast jednego wywołania funkcji :func:`fork` byłyby dwa kolejne wywołania tej funkcji. #. Jaki będzie wynik wykonania `poniższego programu `_ (co zostanie wypisane na standardowym wyjściu), gdy: a) :data:`CZAS_POTOMKA` jest istotnie większy od :data:`CZAS_RODZICA` #) :data:`CZAS_POTOMKA` jest istotnie mniejszy od :data:`CZAS_RODZICA`? .. literalinclude:: zadanie_fork_kill.c