Przydatna biblioteka
-
os
- biblioteka z funkcjami systemowymi.
-
fork
- tworzy proces. wartości zwracane
-
-1
- jeżeli wystąpił błąd (nie udało się utworzyć procesu).
-
0
- jeżeli proces został utworzony (stał się dzieckiem procesu nadrzędnego).
-
PID
procesu potomnego (większy niż 0
)
- jeżeli proces utworzył proces potomny.
Uruchamianie skryptów w terminalu:
Zadania
Zadanie 1.
Przed uruchomieniem postaraj się odgadnąć co wyświetli program w Python'ie:
import os
print("pierwszy napis")
if os.fork() > 0:
os.wait()
print("drugi napis")
if os.fork() > 0:
os.wait()
print("trzeci napis")
Uruchom oraz sprawdź, co zostanie wyświetlone. Uzasadnij działanie tego programu
oraz sprawdź co się stanie jeśli usuniesz
wait()
z kodu programu. Uruchom program ponownie (kilkukrotnie) i zaobserwuj działanie.
Zadanie 2.
Utwórz program, który będzie działał w nieskończonej pętli. Jeżeli do procesu uruchamiający skrypt zostanie
wysłany sygnał
SIGINT
, powinien wyświetlać napis:
Jestem nieśmiertelny
oraz swój indentyfikator procesu.
Jeżeli do procesu uruchamiający skrypt zostanie wysłany sygnał
SIGHUP
, skrypt
powinien przestać reagować na sygnał
SIGINT
.
Podpowiedź: Przykładowy program obsługujący sygnał:
import sys
import signal # pobranie modułu signal
def handle_signal(sig_num, x):
print(”Przechwycono sygnał”)
sys.exit(0)
signal.signal(signal.SIGINT, handle_signal)
Zadanie 3.
Napisz program, który utworzy proces potomny.
Proces potomny powinien wyświetlać swój identyfikator oraz identyfikator procesu nadrzędnego
oraz "wylosowaną" liczbę z zakresu [1; 50] oraz zakończyć
swoje działanie w momencie, gdy wylosowana liczba będzie podzielna przez 5.
Proces nadrzędny, powinien poczekać, aż jego proces potomny
zakończy swoje działanie i wypisać komunikat w którym wypisze swoje id,
a następnie zakończyć program.
Podpowiedź: W celu losowania liczb możesz użyć biblioteki:
random
,
oraz funkcji
randint
.
Zadanie 4.
Napisz program, który utworzy 2 procesy potomne.
Procesy potomne powinny działać w nieskończonej pętli wyświetlać swój identyfikator
oraz identyfikator procesu nadrzędnego.
Proces nadrzędny powinien "losować" liczbę [1; 50] i zakończyć pracę pierwszego
jeśli wylosowana zostanie liczba mniejsza niż 10 oraz drugiego procesu jeśli większa niż 40.
Po "zabiciu" dwóch procesów powinien skończyć swoje działanie.
Zadanie 5.
Napisz program, który będzie zawierał wątek, który, co jakiś czas, będzie wyświetlał
swój identyfikator oraz "wylosowaną" liczbę z przedziału [1; 50].
Wątek powinien zakończyć swoje działanie w momencie, gdy wylosowana liczba
będzie podzielna przez 5.
Podpowiedź 1: Przykładowy program tworzący wątek:
import threading
def work():
print("Jestem wątkiem.")
thread = threading.Thread(target=work)
thread.start()
thread.join()
print("Wątek zakończył działanie.")