Tartalomjegyzék

< Linux

Folyamatok

A linuxos folyamatokról

A futó programot, alkalmazást folyamatnak hívjuk, angolul process.

A memória felosztható két részre:

A kernel space helyen a rendszermag kódjai futnak. A user space térben a felhasználók programjai.

Van egy folyamat, amelynek az azonosítója 0. Ezt a folyamatot sosem látjuk.

Folyamat létrehozása

fogad.c
#include <stdio.h>
int main() {
    char nev[100];
    printf("\nIndulás\n");
    int i;
    for(i=0; i<0xFFFFFFFF;i++);
    printf("Folytatáshoz Enter...");
    fgets(nev, 100, stdin);
    return 0;
}

Fordítás:

gcc -Wall fogad.c -o fogad

Indítsuk el a programot, majd ps paranccsal ellenőrizzük a futást:

$ ps -aef | grep fogad
janos    8573  4326 99 18:41 pts/0    00:00:10 ./fogad
janos    8578  8236  0 18:41 pts/2    00:00:00 grep fogad

Ha megnézzük a ps -aef kimenetét a grep nélkül láthatjuk az a kimenet egyes oszlopainak nevét is:

$ ps -aef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 16:55 ?        00:00:02 /sbin/init
root         2     0  0 16:55 ?        00:00:00 [kthreadd]
root         3     2  0 16:55 ?        00:00:00 [ksoftirqd/0]
root         5     2  0 16:55 ?        00:00:00 [kworker/0:0H]

A parancs kiadása után túl fut a képernyőn. A Shift+PageUp billentyűkombinációval tudunk visszalapozni. De használhatunk lapozó parancsot is:

ps -aef | less

A megjelenő oszlopnevek sorra:

A folyamathoz tartozó felhasználó

Minden folyamat valamilyen felhasználó, valamilyen csoport nevében fut. A ps -aef kimenetében ez az első oszlop, amelynek a felirata UID.

ps -aef

A csoportazonosítók a ps -efj paranccsal tekinthetők meg:

ps -efj

A megjelenő oszlopok:

UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD

A másik új oszlop a SID a Session ID, azaz munkamenet azonosító. Melyik vezető munkamenethez tartozik a folyamat. Ha a PID és a SID megegyezik, akkor ez a folyat a munkamenet vezérlő.

Az init folyamat

Az init folyamat a kernel után induló első folyamat. A kernel fenntartja az 1 folyamatazonosítót az init számára. Az init folyamatokat nem lehet leállítani; csak akkor áll le, ha a rendszert leállítjuk.

Systemd esetén az init szerepét átveszi a systemd. Debian GNU/Linux 9 rendszeren az init valójában csak egy szimbolikus link a systemd-re.

A zombi és árva folyamatok

Ha egy folyamat elveszti a szülőfolyamatát, akkor árva lesz belőle. Az árva folyamatokat az init folyamat elfogja, és ő válik az árva folyamat szülőjévé.

Az árva folyamat nem azonos zombi folyamattal. A zombi folyamatok, olyan folyamatok, amelyek végrehajtása már véget ért, a folyamat leállít, de a szülő folyamat még nem szüntette meg. Ilyenkor, a szülő folyamat még nem kérdezte le a gyermek megszűnési állapotát. A gyermek ilyenkor zombi, és várja, hogy a szülő megszüntesse ezt az állapotot.

A démon folyamatok

A démonfolyamatok vezérlő terminál nélkül futnak, a háttérben. A démon folyamatok indító-parancsállományai a szülők. Induláskor az ilyen szülő lemond a gyermekről, amely árva lesz, amit átvesz az init folyamat.

A folyamatok memóriaelrendezése

Verem

A függvények lokális változói, mutatói kerülnek erre a memóriaterületre. A verem mérete dinamikusan változik, ha értékek kerülne bele, vagy értékek törlődnek belőle.

Halom

A halomterületen helyezkednek el a folyamatok dinamikus változói, objektumai. A halom mindig egy szegmensben helyezkedik el.

Adat

Az adatterületre kerülnek a globális és statikus változók.

Szöveg

A szöveg memóriaterületre kerülnek a program utasításai.

Folyamatok környezete

A linuxos folyamatok környezete változó=érték formában tárolt adatok. A környezet változóit használhatják a alkalmazások, parancsértelmezők stb.

A környezeti változók lekérdezhetők az env paranccsal:

env

Lehetséges kimenet:

$ env
XDG_VTNR=7
XDG_SESSION_ID=2
USER=janos
PWD=/home/janos
HOME=/home/janos
TERM=xterm
SHELL=/bin/bash
SHLVL=1
LOGNAME=janos
XDG_RUNTIME_DIR=/run/user/1000
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
_=/usr/bin/env

Források