Unix-alapok
A Unix/Linux szerverek üzemeltetése wikiből
		(Változatok közti eltérés)
		
		
a (→Processz állapottere:  capability említés szintjén, és még pár apró kiegészítés)  | 
			 (→Signalok:  bővítés 2008)  | 
			||
| 30. sor: | 30. sor: | ||
* Aszinkron jelzések processzek között  | 
  * Aszinkron jelzések processzek között  | 
||
* Lehet hozzájuk handlereket regisztrálni  | 
  * Lehet hozzájuk handlereket regisztrálni  | 
||
| − | * Az érdektelenek kimaszkolhatók (kivéve KILL)  | 
  + | ** Handler nélkül öt alapakció egyikét eredményezik:  | 
| + | **# Term (kilépés)  | 
||
| + | **# Ign (semmi)  | 
||
| + | **# Core (kilépés és coredump)  | 
||
| + | **# Stop (felfüggesztés)  | 
||
| + | **# Cont (folytatás, ha a processz fel volt függesztve)  | 
||
| + | ** Van alapértelmezés, hogy ezek közül melyiket, de a processz megváltoztathatja.  | 
||
| + | ** A signal disposition (hogy mi történjen egy adott signal hatására) a processz tulajdonsága, minden threadben ugyanaz.  | 
||
| + | * Az érdektelenek kimaszkolhatók, blokkolhatók (kivéve KILL és STOP).  | 
||
| + | ** A blokkolt signalok sorbaállnak, amíg a processz vagy szál meg nem szünteti a blokkolásukat.  | 
||
| + | ** A processze lekérdezheti, milyen sorbanálló signaljai vannak (<tt>sigpending()</tt>).  | 
||
| + | * Signal címzettje lehet processz vagy szál (thread).  | 
||
| + | ** Ha többszálú processz kap signalt, a kernel az adott signalt éppen nem blokkoló szálak közül véletlenszerűen választja ki azt, amelyik megkapja.  | 
||
* Kézbesítésük nem feltétlenül azonnali (pl. D állapotú processz nem kapja meg, l. később)  | 
  * Kézbesítésük nem feltétlenül azonnali (pl. D állapotú processz nem kapja meg, l. később)  | 
||
* Signal küldése  | 
  * Signal küldése  | 
||
** kill paranccsal  | 
  ** kill paranccsal  | 
||
** kill() rendszerhívással  | 
  ** kill() rendszerhívással  | 
||
| − | ** sigqueue() rendszerhívással (ekkor adat is küldhető mellé)  | 
  + | ** sigqueue() rendszerhívással (ekkor adat is küldhető mellé, de csak akkor van értelme, ha a fogadó processz kifejezetten foglalkozni akar vele)  | 
** Hány signal állhat sorba? 1? Több? Házi feladat :)  | 
  ** Hány signal állhat sorba? 1? Több? Házi feladat :)  | 
||
* Néhány gyakori signal:  | 
  * Néhány gyakori signal:  | 
||
| 72. sor: | 72. sor: | ||
*** Folytatódhat a végrehajtás STOP vagy TSTP után  | 
  *** Folytatódhat a végrehajtás STOP vagy TSTP után  | 
||
** STOP  | 
  ** STOP  | 
||
| − | *** Felfüggesztés  | 
  + | *** Felfüggesztés, nem maszkolható  | 
** TSTP (Terminal stop)  | 
  ** TSTP (Terminal stop)  | 
||
*** Felfüggesztés CTRL-Z hatására  | 
  *** Felfüggesztés CTRL-Z hatására  | 
||
A lap 2008. szeptember 17., 00:10-kori változata
A Unix:
- Többfelhasználós (multiuser)
 - Többfeladatos (multitaszking)
 - Hálózati (network)
 
operációs rendszer (operating system). De ezt úgyis tudtuk.
Egy csomó minden mást is tudunk, úgyhogy koncentráljunk inkább olyasmire, amit talán nem, vagy nem annyira pontosan.
Tartalomjegyzék | 
1 Processz állapottere
- UID
 - GID
 - supplementary group memberships
 - effektív UID (pl. setuid bit miatt lehet más)
 - effektiv GID (pl. setgid bit miatt lehet más)
 - current working directory
 - filedeszkriptorok
 - környezeti változók
 -  PGID
- kill -SIGNAL -PGID az egész process groupnak elküldi a signalt
 
 - scheduler
 - niceness (Linuxon újabban külön ionice is)
 - resource limits
 - root directory (chroot esetén változhat)
 - umask
 - (capability-k)
 - újabban: namespace (külön fs-, hálózati-, processz-, esetleg IPC-)
 - stb.
 
2 Signalok
- Aszinkron jelzések processzek között
 -  Lehet hozzájuk handlereket regisztrálni
-  Handler nélkül öt alapakció egyikét eredményezik:
- Term (kilépés)
 - Ign (semmi)
 - Core (kilépés és coredump)
 - Stop (felfüggesztés)
 - Cont (folytatás, ha a processz fel volt függesztve)
 
 - Van alapértelmezés, hogy ezek közül melyiket, de a processz megváltoztathatja.
 - A signal disposition (hogy mi történjen egy adott signal hatására) a processz tulajdonsága, minden threadben ugyanaz.
 
 -  Handler nélkül öt alapakció egyikét eredményezik:
 -  Az érdektelenek kimaszkolhatók, blokkolhatók (kivéve KILL és STOP).
- A blokkolt signalok sorbaállnak, amíg a processz vagy szál meg nem szünteti a blokkolásukat.
 - A processze lekérdezheti, milyen sorbanálló signaljai vannak (sigpending()).
 
 -  Signal címzettje lehet processz vagy szál (thread).
- Ha többszálú processz kap signalt, a kernel az adott signalt éppen nem blokkoló szálak közül véletlenszerűen választja ki azt, amelyik megkapja.
 
 - Kézbesítésük nem feltétlenül azonnali (pl. D állapotú processz nem kapja meg, l. később)
 -  Signal küldése
- kill paranccsal
 - kill() rendszerhívással
 - sigqueue() rendszerhívással (ekkor adat is küldhető mellé, de csak akkor van értelme, ha a fogadó processz kifejezetten foglalkozni akar vele)
 - Hány signal állhat sorba? 1? Több? Házi feladat :)
 
 -  Néhány gyakori signal:
-  HUP (HangUp)
- Ha eltűnik a terminál (pl. a user bezárja az ablakot)
 - Daemonoknál gyakran: olvasd újra a configot
 
 -  INT (Interrupt)
- CTRL-C
 
 -  QUIT 
- CTRL-\
 
 -  ILL (Illegal instruction)
- CPU-kivétel
 - súlyos program- vagy hardverhibára utal
 
 -  KILL
- Kilépteti a processzt, nem maszkolható
 
 -  USR1
- Nincs előre definiált jelentése, szabadon felhasználható
 
 -  SEGV (Segmentation Violation)
- "A program érvénytelen műveletet hajtott végre"
 -  Tipikus okok:
- Pointer rossz helyre mutat (pl. túlcímeztünk egy tömböt)
 - Valamit kértünk, nem sikerült, mégis használjuk (pl. nemlétező file-t próbáltunk megnyitni, és annak ellenére, hogy az open() hibát adott vissza, az érvénytelen filedescriptorból olvasni próbálunk)
 
 - Vagyis: programhiba
 - Lehet hardverhiba is
 
 -  USR2
- l. mint fent
 
 -  PIPE ("broken pipe")
- A pipe-unkat olvasó processz kilépett
 
 -  ALRM (Alarm)
- Időzítő lejárt
 
 -  TERM (Terminate)
- Default "lépj ki" signal
 
 -  CHLD (Child exited)
- Véget ért egy gyermekfolyamatunk
 
 -  CONT (Continue)
- Folytatódhat a végrehajtás STOP vagy TSTP után
 
 -  STOP
- Felfüggesztés, nem maszkolható
 
 -  TSTP (Terminal stop)
- Felfüggesztés CTRL-Z hatására
 
 -  XCPU (CPU time exceeded)
- Lejárt a megengedett CPU-idő
 
 -  WINCH (Window changed)
- Megváltozott a terminál mérete
 
 
 -  HUP (HangUp)
 
3 Processzek állapotai
Pl. a ps(1) outputjában látszanak:
% ps axu USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND [...] korn 1842 0.0 0.1 4932 2592 ? Ds Sep07 0:23 SCREEN -D korn 17670 0.0 0.0 4896 948 pts/0 R+ 20:55 0:00 ps axu [...]
- D: I/O-ra vár (itt alighanem épp a read() vagy a write() rendszerhívásban)
 - R: fut vagy futásra kész
 - S: vár (ilyenkor kaphat signalt)
 - T: fel van függesztve
 - Z: "zombie" - véget ért, de a szülője még nem olvasta ki a visszatérési értékét a wait() vagy a waitpid() rendszerhívással
 
Egyéb flagek:
- <: negatív nice (több processzoridőt kap)
 - N: pozitív nice (kevesebb processzoridőt kap)
 - s: session leader (igazából nincs jelentősége)
 - l: többszálú
 - +: előtérben van
 
4 Ajánlott irodalom
Ezeket részben hallgatók írták egy másik tárgy óráin elhangzottak alapján, úgyhogy lehetnek bennük tévedések:
- 2004. őszi "alapozólabor" első gyakorlatának óravázlata
 - 2005. tavaszi "alapozólabor" első gyakorlatának óravázlata
 - 2005. őszi "alapozólabor" első gyakorlatának óravázlata
 - 2006. tavaszi "alapozólabor" első gyakorlatának óravázlata
 
Ezek megbízhatóbbak, de csak a signalokról van szó bennük:
- man 7 signal (különösen a realtime signalokról szóló rész tanulságos)
 - man 2 kill (magyarul)
 - man 1 kill (magyarul)
 
A processzek lehetséges állapotairól:
A process groupokról:
- http://en.wikipedia.org/wiki/Process_group
 - Job Control (Ez kicsit részletesebb.)
 
5 Potenciális zh-kérdések
-  Soroljon fel legalább tíz olyan állapotváltozót (az állapottér elemét), amelyet egy unixos gyermekfolyamat örököl a szülőjétől!
- current working directory
 - UID
 - GID
 - effektív UID (pl. setuid bit miatt lehet más)
 - effektiv GID (pl. setgid bit miatt lehet más)
 - PGID
 - filedeszkriptorok
 - környezeti változók
 - umask
 - root directory (chroot esetén változhat)
 
 -  Mi a process group?
- Több processz összerendelése egy csoportba. Hasznos, ha futás közben forkol a processz. Nem szükséges figyelni, hogy indult-e újabb, mert a PGID segítségével a csoport összes folyamata megkapja a nekik szánt signal-t.
 
 -  Mi a supplementary group?
- A felhasználó több csoportnak is a tagja, a /etc/group-ban több grouphoz is be van jegyezve.
 
 -  A processzek szempontjából mit jelent az, hogy egy felhasználó tagja egy csoportnak?
- Szigorúan véve nem a felhasználóknak, hanem a futó folyamatoknak vannak csoporttagságaik, ezért a változtatások csak az újonnan induló processzekre lesznek érvényesek, ha a felhasználót hozzáadjuk egy újabb csoporthoz.
 - Még szigorúbban véve az adott buroktól öröklik a jogokat az újonnan induló folyamatok is, ezért aztán újra be kell lépni. Vagy legalábbis újra beolvastatni a burokkal a csoporttagságokat.