Procesy i shell. Polecenia ps, sleep, exit, jobs, bg, fg, top, kill, bash, tcsh, which, type, whereis, touch. Metaznak & i >>. Dowiązania miękkie i twarde. Proces jest programem, który jest wykonywany i który jest identyfikowany przez swój unikalny numer PID. Pierwszy wykonywany proces w systemie to init z PID nr 1. Jądro SO kontroluje i zarządza procesami. Proces składa się z: wykonywanego programu, danych i stosu, wskaźnika stosu i programu, rejestrów, informacji niezbędnych do wykonania (uruchomienia programu). Wywołany shell również jest procesem. Shell może również tworzyć procesy poprzez wywołania systemowe (ang. system calls) do jądra SO. Istnieje pewna liczba wywołań systemowych służących do tworzenia, wykonywania i zakończenia procesu. Są to odwołania: fork wait exec exit Dodatkowo każdy proces zawiera informacje, którego użytkownika jest własnością, czyli kto go uruchomił. Proces rodzic shell Proces dziecko shell Nowy program grep PID: 124 PID: 125 PID: 125 Krok 1 Krok 2 Krok 3 ENV fork ENV exec ENV wait 0 stdin 1 stdout 0 stdin 1 stdout 0 stdin 1 stdout 2 stderr 2 stderr 2 stderr exit Instytut Informatyki AP, rok akademicki 2007/08 Strona 1 z 7
Jak przebiega schemat działania wprowadzonego polecenia w powłoce? Wskaźnik zachęty do wpisania następnego polecenia shell szuka wprowadzonego polecenia Czy jest to wbudowane polecenie? tak zostaje wykonane polecenie nie tworzenie procesu potomnego poprzez fork wywołanie systemowe wait Proces macierzysty shella czeka Czy jest to wykonywalny program? wywołanie systemowe exec nie Jądro ładuje do pamięci program i uruchamia w procesie potomnym Uruchomienie procesu, a następne jego zakończenie Czy jest to jest koniec skryptu? tak wyjście wywołanie systemowe exit nie Proces macierzysty budzi się Instytut Informatyki AP, rok akademicki 2007/08 Strona 2 z 7
fork - powoduje utworzenie nowego procesu, tzw. procesu dziecko (potomnego) będącego kopią procesu, który spowodował odwołanie systemowe i który jest nazywany procesem rodzicem (macierzystym). wait - powoduje przejście procesu typu rodzic w stan oczekiwania. exec - proces dziecko, po odszukaniu ścieżki na dysku, gdzie znajduje się wykonywalny program odpowiadający poleceniu, które nie jest wbudowane w jądro (np. ls), wydaje exec, który powoduje załadowanie do pamięci, na miejsce procesu - dziecko tego nowego programu, który sam staje się procesem - dzieckiem i zaczyna być wykonywany. exit - wykonywany proces - dziecko może zakończyć się w dowolnej chwili poprzez wykonywanie/wywoływanie exit. gdy proces - dziecko kończy się exit powoduje wysłanie sygnału i oczekuje od rodzica akceptacji swojej przyczyny zakończenia (statusu wyjścia), status wyjścia jest liczbą z zakresu 0 255, wartość 0 oznacza, że program zakończył się pomyślnie, wartość!= 0 oznacza, że nastąpiło awaryjne wyjście z programu, shell posiada wbudowaną zmienną ($ status w shellu C, $? w shellu Bourne'a i Korn'a), która pamięta status wyjścia ostatniego wykonywanego polecenia. Jeżeli z jakichś powodów "rodzic" nie czeka na zakończenie procesu "dziecko", to zostaje ono zawieszone dopóki "rodzic" nie wywoła wait lub "rodzic" umrze. Jeżeli rodzic umrze przed dzieckiem, proces init adoptuje proces dziecko. Każdy proces ma swój PID -f Pełna informacja o procesach UID identyfikator użytkownika (kto uruchomił proces) PID identyfikator procesu PPID identyfikator procesu macierzystego danego procesu (id procesu, który go uruchomił). C wykorzystanie procesora w jednostce czasu STIME czas utworzenia procesu (kiedy się rozpoczął) TTY terminal CMD polecenie, które uruchomiło proces e more Pokaże wszystkie procesy ax u Podaje dodatkowe informacje o procesach, podobne do f. Po wpisaniu tego polecenia pojawia się rozszerzony opis procesów. Warto zwrócić uwagę na kolumnę STAT. Wspomniana kolumna może przybrać: (R) - proces działający, (S) - uśpiony, (T) - zatrzymany, (Z) - zombie. Instytut Informatyki AP, rok akademicki 2007/08 Strona 3 z 7
Wpisz w drugiej utworzonej powłoce: $ bash -f $ tcsh -f $ exit $ exit Polecenie kill służy do zakończenia procesu, którego jesteśmy użytkownikiem $ kill PID $ kill -9 PID Usuń bezwarunkowo proces PID $ kill l Wyświetli listę wszystkich sygnałów $ man 7 signal Inne polecenie wyświetlające listę procesów: $ top Lista procesów najbardziej absorbujących pamięć Metaznak & (przetwarzanie procesu "w tle") $ date; who wc $ (date; who) wc $ sleep 10 $ sleep 10 <Enter> date <Enter> $ sleep 20& <Enter> $ date <Enter> $ who $ (sleep 15; ls)& <Enter> $ date <Enter> $ (sleep 10; who)& date $ (sleep 15; ls)& (sleep 10; who) $ (sleep 15; ls)& (sleep 10; who)& Instytut Informatyki AP, rok akademicki 2007/08 Strona 4 z 7
Jeżeli zapomnieliśmy wysłać proces w tło, zawsze można zrobić to później. $ sleep 100 Naciśnij Ctrl + Z $ jobs $ bg $ fg Tworzenie pustego pliku Utwórz katalog lab3 i przejdź do niego. $ touch pusty -l Status wyjścia wykonania polecenia $ cp pusty $ echo $? 1 $ cp pusty p_ty $ echo $? 0 Można sprawdzić czy dane polecenie jest wykonywalnym programem $ type cat $ which cat $ which ls $ which cd $ whereis ls Kilka poleceń można wykonać z pojedynczej linii poleceń $ date; ls $ date;\ ls $ cd lab3 Wynik wykonania polecenia można skierować do pliku zamiast na standardowe wyjście $ cat p_ty $ date > p_ty $ cat p_ty Instytut Informatyki AP, rok akademicki 2007/08 Strona 5 z 7
Polecenie cat można wykorzystać do połączenia kilku plików w jeden plik $ cat > p1 Co by tutaj napisać. Naciskamy Ctrl + C $ cat p1 Utwórzmy kilka plików: $ date > data $ w > kto > lista Łączenie plików $ cat p1 data kto > razem $ cat razem Dołączanie do pliku $ cat data lista >> razem $ cat razem Ale! $ cat data lista > razem $ cat razem Jeszcze o touch l $ touch pusty l $ touch data l Instytut Informatyki AP, rok akademicki 2007/08 Strona 6 z 7
Dowiązania miękkie i twarde $ date > plik_1 > plik_2 $ ln plik_1 plik_dt p $ ln s plik_2 plik_dm parametr s tworzy dowiązanie miękkie p -l $ cat plik_dt $ cat plik_dm $ rm plik_2 $ cat plik_dm BŁĄD!! cat: plik_dm: Nie ma takiego pliku ani katalogu $ rm plik_1 $ cat plik_dt Instytut Informatyki AP, rok akademicki 2007/08 Strona 7 z 7