# 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`

1. zarządzanie zadaniami:

(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

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