[[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)