[[oktatas:linux|< Linux]]
====== Folyamatok ======
* **Szerző:** Sallai András
* Copyright (c) 2019, Sallai András
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== A linuxos folyamatokról =====
A futó programot, alkalmazást folyamatnak hívjuk, angolul process.
A memória felosztható két részre:
* kernel space
* user space
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 =====
#include
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:
* UID -- felhasználó külső azonosító
* PID -- folyamat belső azonosító
* PPID -- szülőfolyamat azonosítója
* C -- processzorhasználat
* STIME -- mikor indulat a folyamat -- start time
* TTY -- kapcsolt teletype
* TIME -- processzor használat összesen
* CMD -- a folyamat neve, külső azonosítója, paraméterekkel
===== 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 =====
* [[https://www.ibm.com/developerworks/community/blogs/58e72888-6340-46ac-b488-d31aa4058e9c/entry/an_overview_of_linux_processes21?lang=en|https://www.ibm.com/]] (2019)
* https://www.tecmint.com/linux-process-management/ (2019)
* https://www.cyberciti.biz/faq/show-all-running-processes-in-linux/ (2019)
* [[https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux|https://www.digitalocean.com/]] (2019)
* https://www.tldp.org/LDP/tlk/kernel/processes.html (2019)
* [[https://www.howtogeek.com/107217/how-to-manage-processes-from-the-linux-terminal-10-commands-you-need-to-know/|https://www.howtogeek.com/]] (2019)
* https://www.geeksforgeeks.org/processes-in-linuxunix/ (2019)