# SO Lista 3 v2 ### zadanie 1 osierocenie - parent process terminuje się przed dzieciorem zadanie 2goplanowe - proces/grupa procesów działająca w tle, nie mają dostępu do operacji read/write do tty lider sesji - program zarządzający grupą procesów, czyli **sesją** (zazwyczaj jest to shell - bash/zsh). Kooperuje z kernelem za pomocą sygnałów, system calli terminal sterujący - urządzenie znakowe, odpowiada za efekt wpisywanych przez nas komend do emulatora terminala, porozumiewa się z procesami, zarządza uprawnieniami (r/w) mówi które są pierwszoplanowe/drugoplanowe Ciekawostka. Żeby zmienić tty to albo ctrl+alt+F(N), ale nie da się np w ten sposób wejść do tty50 - wtedy trzeba sudo chvt 50. (Polesiuk nie był w stanie na repetach na to pytanie odpowiedzieć) Co trzeba zrobić w terminalu: 1. xterm -e 'bash -i' & 2. (w xtermie) sleep 1000 & 3. (w normalnym terminalu) ps -eo user,pid,ppid,pgid,cmd 4. pokazać gdzie jest sleep, bash -i, xterm 5. kill -s SIGKILL N (N = pid od bash -i) 6. ps -eo user,pid,ppid,pgid,cmd 7. Pokazać że nie ma basha ani xterma, ale za to jest sleep - kto został jego rodzicem? (U mnie systemd) #### Co się dzieje z sesją która utraci terminal sterujący? Wszystkie procesy sesji dostają sygnał SIGHUP (man 4 tty) (do sprawdzenia co to man 7 signal i wyszukać SIGHUP) 1. kernel wysyła SIGHUP i SIGCONT (ten drugi po to żeby sygnał doszedł gdyby shell był zastopowany) 2. Przestawia handlera(?) (na swoje tylko inne) 3. odblokowuje sygnały i rzuca SIGHUP na siebie wtedy wchodzimy do innego handlera (to wygląda jak ogólny handler bo wszystkie ma na ten sam adres) 4. blokujemy spowrotem sygnały (HUP, INT, QUIT, TERM ...) i restorujemy ogólny handler 5. coś dziwnego dzieje się z SIGTSTP (raczej nie ważne) 6. Wysyłamy (jako bash) SIGHUP do każdej grupy procesów (do dzieciorów) ### zad 2 ### zad 3 `stty -a` ![](https://i.imgur.com/LYBTXP2.png) 1. zarządzanie zadaniami: ![](https://i.imgur.com/mXHa11H.png) (nwm czy kill też czy nie, bo on jest jakiś dziwny - u mnie usuwa wszystko co napisałem do tej pory) Status - wysyła SIGINFO do fg procesu/grupy dsusp - prawie jak susp ale działa gdy jest jakiś fg proces susp - wysyła SUGTSTP do grupy w fg intr - clrt+c (SIGINT) quit - wysyła SIGQUIT do fg (nie działa jeśli ISiG(?) ) 2. edycja wiersza ![](https://i.imgur.com/xk7tDIt.png) reprint - search in reverse - szukanie komendy w historii od dołu discard - zatrzymuje/wznawia flushing terminala werase - kasuje słowo erase - backspace lnext - nastepny znak jest interprotowany dosłownie #### jaki sygnał do naprawienia okna terminala? SIGWINCH #### Jaka funkcja może dostać aktualny sia(?) ? ioctl(), struktura winsize ### zad 4 ### Zad 5 `stty -a` 1. - `sleep 1000` - ctrl+Z - `bg` - sygnał == SIGTSTP 2. - `find /` - ctrl+s - ctrl+q - itd. - ctrl+s wstrzymuje output, ctrl+q wznawai, nie ma to nic wspólnego z processem 3. `cat - &` od razu jest wstrzymane bo na bg nie można robić operacji r/w, a polecenie `cat -` tylko na tym polega lol. sygnał == SIGTTIN/SIGSTOP 4. «to stop» powoduje, ze SIGTTOU zostanie wysłany jeśli bg proces bedzie pisał do stdout (robi że bg nie może nic wypisywać(?)) - `cat /etc/shells &` - `stty tostop` - `cat /etc/shells &` + można pokazać `fg` żeby się odpaliło - (żeby spowrotem naprawić) `stty -tostop` 5. `stty -echoctl` znaki kontrolne są przetwarzane "surowo", czyli w outpucie są raw bajty a nie notacja np. ctrl+c == '^C' lub esc == "^\[". echoctl wyłącza notację znaków kontrolnych - `stty -echoctl` - np `sleep 1000`, ctrl+c ### zad 6 ### zad 7 ### zad 8