---
# System prepended metadata

title: SO Lista 3 v2

---

# 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