Zistite pid procesu systému Windows. Zmena PID procesu v Linuxe pomocou modulu jadra. Linuxové riadenie procesov

  • 05.04.2019
Operačná sála UNIXový systém Robachevsky Andrey M.

ID procesu ID procesu (PID)

Každý proces má jedinečný identifikátor PID, ktorý umožňuje jadru systému rozlišovať medzi procesmi. Kedy sa vytvorí nový proces, jadro mu pridelí ďalší voľný (to znamená, že nie je spojený so žiadnym procesom) identifikátor. Prideľovanie identifikátorov je vzostupné, t.j. ID nového procesu je väčšie ako ID procesu vytvoreného pred ním. Ak id dosiahol maximálna hodnota, ďalší proces získa minimálny voľný PID a cyklus sa opakuje. Keď sa proces ukončí, jadro uvoľní identifikátor, ktorý obsadil.

Z knihy Architektúra operačného systému UNIX autor Bach Maurice J.

4.4 KONVERZIA ZLOŽENÉHO NÁZVU SÚBORU (CESTY VYHĽADÁVANIA) NA INDEXOVÝ IDENTIFIKÁTOR otvorené príkazy, chdir (zmena adresára) alebo odkaz. Keďže interne jadro pracuje s indexmi a nie s

Z knihy Vzácne povolanie autor Zuev Evgeniy

Čo je to identifikátor? Okrem syntaktických nejasností rýchlo vyplávali na povrch aj ďalšie nepríjemnosti. Náročnejšie je ukázať ich na príkladoch, takže musíte hovoriť slovami.Syntax jazyka C++ je nepohodlná aj z iného hľadiska. Skrátka priama

Z knihy Programovanie Autor Kozlová Irina Sergejevna

11. Identifikátor. Kľúčové slová Identifikátor je postupnosť čísel, písmen a špeciálnych znakov. V tomto prípade je prvým písmenom resp zvláštny charakter... Môžete použiť malé písmená alebo veľké písmená latinská abeceda.

Z knihy 200 najlepšie programy pre internet. Populárny tutoriál autor Krainsky I

Process Guardian XP Výrobca: T.A.S. Nezávislé programovanie (http://www.tas-independent-programming.com) Stav: Odkaz na stiahnutie zadarmo: http://www.tas-independent-programming.com/cgi-bin/countdown.pl?Guardian exe. Veľkosť: 2,4 MB Hlavným účelom tohto nástroja je spravovať procesy bežiace na počítači.

Z knihy Microsoft Visual C ++ a MFC. Programovanie pre Windows 95 a Windows NT Autor Frolov Alexander Vjačeslavovič

Identifikátor otvorený súbor Trieda CFile obsahuje dátový prvok m_hFile typu UINT. Ukladá identifikátor otvoreného súboru. Ak ste vytvorili objekt triedy CFile, ale ešte ste neotvorili žiadny súbor, potom sa konštanta hFileNull zapíše do m_hFile. Zvyčajne to nie je potrebné.

Z knihy UNIX: Process Communication Autor Stevens William Richard

Transaction ID Ďalšou súčasťou stratégie timeoutu a retransmisie je použitie identifikátorov transakcie (ID transakcie alebo XID) na rozpoznávanie požiadaviek klientov a odpovedí servera. Keď klient zavolá funkciu RPC, knižnica to priradí

Z knihy TCP/IP Architecture, Protocols, Implementation (vrátane IP verzie 6 a IP Security) od Faith Sidney M

16.7 Časová pečiatka a ID správy Keď dostanete poštu, je zaujímavé vedieť, kedy bola odoslaná a prijatá. SMTP pridá tieto informácie do preposlanej správy. Okrem toho tento protokol sleduje všetkých hostiteľov, ktorí vysielali poštová správa a čas

Z knihy Adobe konkurz 3 návod Autor autor neznámy

Dynamic EQ (proces) Efekt Dynamic EQ mení množstvo filtrovania v priebehu času. Napríklad v prvej polovici vlny môžete zvýšiť vysoké frekvencie, a v druhom - zmeniť šírku ovplyvneného frekvenčného pásma. Okno Dynamic EQ má tri karty: Gain, Frequency a Q (bandwidth). 1. Frekvenčný graf

Z knihy PHP Author's Reference

Pan / Expander (proces) Efekt Pan / Expand vám umožňuje pohybovať sa centrálny kanál(mono) zo stereo signálu a rozšíriť alebo zúžiť stereo oddelenie ľavého a pravého kanála. Stredový kanál sa posúva pomocou stredového a priestorového kanála stereo nahrávanie,

Z knihy Developing Applications in Linuxové prostredie... Druhé vydanie Autor Johnson Michael K.

Stretch (proces) Efekt Stretch vám umožňuje zmeniť výšku tónu (výšku tónu) zvukový signál, tempo alebo oboje. Tento efekt môžete použiť napríklad na zvýšenie výšky tónu zvukového záznamu bez zmeny jeho trvania alebo naopak, na zmenu dĺžky bez zmeny

Z knihy Firebird DATABASE DESIGNER'S GUIDE od Borri Helen

ID relácie Takže ID relácie je názov dočasného úložiska, ktoré sa použije na ukladanie údajov relácie medzi spustením skriptu. Jeden SID - jeden obchod. Žiadne SID, žiadne úložisko a naopak. Ako teda súvisí identifikátor a meno?

Z knihy Operačný systém UNIX Autor Robachevsky Andrey M.

10.2.1. ID procesu a rodokmeň Dva z najzákladnejších atribútov sú ID procesu alebo pid a ID jeho nadradeného procesu. Pid je kladné celé číslo, ktoré jednoznačne identifikuje

Z knihy autora

10.2.3. Uid súborového systému Vo veľmi špeciálnych prípadoch môže program potrebovať uložiť svoje root práva na všetko okrem prístupu k systém súborov v ktorom používa vlastné uid. Pôvodne sa používa v serverovom priestore Linux NFS

Z knihy autora

ID domény Pri vytváraní domény v databáze musíte zadať ID domény, ktoré je v databáze globálne jedinečné. Vývojári často používajú predponu alebo príponu v identifikátoroch domény na zlepšenie dokumentácie. Napríklad: VYTVORIŤ

Z knihy autora

Z knihy autora

ID nadradeného procesu (PPID) Identifikátor procesu, ktorý vytvoril toto



V tomto článku sa pokúsime vytvoriť modul jadra, ktorý už dokáže zmeniť PID prebiehajúci proces v OS Linux, ako aj experimentovať s procesmi, ktoré dostali zmenené PID.


Varovanie: Zmena PID je neštandardný proces a za určitých okolností môže viesť k panike jadra.

náš testovací modul implementuje znakové zariadenie / dev / test, pri čítaní ktorého proces zmení PID. Za príklad implementácie znakového zariadenia vďaka tomuto článku. Vyplňte kód modul je uvedený na konci článku. Samozrejme, najviac správne rozhodnutie bolo pridať systémové volanie do samotného jadra, to by si však vyžadovalo rekompiláciu jadra.

Životné prostredie

Všetky akcie na testovanie modulu boli vykonávané virtuálne stroj VirtualBox so 64-bitovou distribúciou Linuxu a verziou jadra 4.14.4-1. Komunikácia so strojom prebiehala pomocou SSH.

Pokus č. 1 jednoduché riešenie

Pár slov o prúde: premenná current ukazuje na štruktúru task_struct s popisom procesu v jadre (PID, UID, GID, cmdline, menné priestory atď.)

Prvou myšlienkou bolo jednoducho zmeniť parameter current-> pid z modulu jadra na požadovaný.

Static ssize_t device_read (struct file * filp, char * buffer, size_t length, loff_t * offset) (printk ("PID:% d. \ N", current-> pid); current-> pid = 1; printk ("new PID: % d. \ N ", aktuálny-> pid);,)
Aby som otestoval funkčnosť modulu, napísal som program v C ++:

#include #include #include int main () (std :: cout<< "My parent PID " << getppid() << std::endl; std::cout << "My PID " << getpid() << std::endl; std::fstream f("/dev/test",std::ios_base::in); if(!f) { std::cout << "f error"; return -1; } std::string str; f >> str; std :: cout<< "My new PID " << getpid() << std::endl; execl("/bin/bash","/bin/bash",NULL); }
Nahrajte modul pomocou insmod, vytvorte / dev / otestujte a vyskúšajte.

# ./a.out Môj rodič PID 293 Môj PID 782 Môj nový PID 782
PID sa nezmenil. Toto nemusí byť jediné miesto, kde je uvedený PID.

Pokus č. 2 ďalšie polia PID

Ak current-> pid nie je ID procesu, čo potom je? Rýchly pohľad na kód getpid () ukázal na štruktúru task_struct popisujúcu proces Linuxu a súbor pid.c v zdrojovom kóde jadra. Požadovaná funkcia je __task_pid_nr_ns. Kód funkcie obsahuje volanie task-> pids.pid, tento parameter zmeníme

Kompilácia, skúšanie

Keďže som testoval cez SSH, podarilo sa mi získať výstup programu skôr, ako sa jadro zrútilo:

Môj rodič PID 293 Môj PID 1689 Môj nový PID 1689
Prvý výsledok je už niečo. Ale PID sa stále nezmenilo.

Pokus č. 3 neexportované symboly jadra

Bližší pohľad na pid.c priniesol funkciu, ktorá robí to, čo chceme.
static void __change_pid (struct task_struct * task, enum typ pid_type,
struct pid * nový)
Funkcia akceptuje úlohu, pre ktorú je potrebné zmeniť PID, typ PID a vlastne aj nový PID. Nový PID je vytvorený funkciou
struct pid * alloc_pid (struct pid_namespace * ns)

Táto funkcia akceptuje iba menný priestor, v ktorom bude nový PID, tento priestor možno získať pomocou task_active_pid_ns.
Ale je tu jeden problém: tieto symboly jadra nie sú exportované jadrom a nemôžu byť použité v moduloch. Pri riešení tohto problému mi pomohol jeden úžasný. Odtiaľ je prevzatý kód funkcie find_sym.

Statické asmlinkage void (* change_pidR) (struct task_struct * task, enum typ pid_type, struct pid * pid); static asmlinkage struct pid * (* alloc_pidR) (struct pid_namespace * ns); static int __init test_init (void) (printk (KERN_ALERT "Načítaný testovací ovládač! \ n"); change_pidR = find_sym ("change_pid"); alloc_pidR = find_sym ("alloc_pid"); ...) static ssize_t device_read (súbor struct * filp, char * buffer, size_t length, loff_t * offset) (printk ("PID: % d. \ n", current-> pid); struct pid * newpid; newpid = alloc_pidR (task_active_pid_ns (aktuálne)); change_pidR (aktuálne , PIDTYPE_PID, newpid); printk ("nové PID: % d. \ N", aktuálne-> pid); ...)
Kompliment, spustenie

Môj rodič PID 299 Môj PID 750 Môj nový PID 751
PID zmenené! Jadro automaticky pridelilo voľné PID nášmu programu. Je však možné použiť PID, ktorý prevzal iný proces, napríklad PID 1? Po pridelení pridajte kód

Newpid-> čísla.nr = 1;
Kompliment, spustenie

Môj rodič PID 314 Môj PID 1172 Môj nový PID 1
Získame skutočný PID 1!

Bash vykázal chybu, keď príkaz % n zapnutie úlohy nebude fungovať, ale všetky ostatné funkcie fungujú správne.

Zaujímavé vlastnosti procesov so zmeneným PID

PID 0: enter nemožno opustiť

Vráťme sa ku kódu a zmeňte PID na 0.

Newpid-> čísla.nr = 0;
Kompliment, spustenie

Môj rodič PID284 Môj PID 1517 Môj nový PID 0
Takže PID 0 nie je také špeciálne? Sme spokojní, napíšte exit a ...

Jadro padá! Jadro definovalo našu úlohu ako NEČINNÁ ÚLOHA a keď videlo dokončenie, jednoducho spadlo. Zdá sa, že pred ukončením by mal náš program vrátiť sám sebe „normálne“ PID.

Neviditeľný proces

Vráťme sa ku kódu a nastavíme PID, ktorý je zaručene neobsadený
newpid-> čísla.nr = 12345;

Kompliment, spustenie

Môj rodič PID296 Môj PID 735 Môj nový PID 12345
Pozrime sa, čo je v / proc

1 148 19 224 288 37 79 86 93 konzoly fb kcore zámky oddiely swap verzia 10 149 2 226 29 4 8 87 acpi cpuinfo súborové systémy crypt-users meminfo sched_debug sched_debug sys2922531 sys292251 sys2000sys2vmalloc55180 spúšť vmstat 11 16 208 24 291 6 81 89 buddyinfo zariadenia prerušenia kmsg moduly scsi sysvipc zoneinfo 12 17 21 25 296 7 82 9 zbernicová skupina diskstats iomem kpagecgroup mounts self thread-self 13_107 39-self time 231017 139 18 22 27 30 76 84 91 ovládač cmdline irq kpageflags net softirqs tty 14 182 222 28 31 78 85 92 config.gz execdomains kallsyms loadavg pagetypeinfo stat uptime
Ako môžete vidieť / proc nedefinuje náš proces, aj keď sme si požičali bezplatné PID. Predchádzajúci PID nie je ani v / proc, čo je veľmi zvláštne. Môžeme byť v inom mennom priestore, a preto nie sme viditeľní pre hlavný / proc. Poďme pripojiť nový / proc a uvidíme, čo tam je

1 14 18 210 25 291 738 81 9 zbernicové zariadenia fs key-users locks pagetypeinfo softirqs timer_list 10 148 182 22 26 296 741 82 90 cgroups 90 km diskstats prerušenia kľúče 272 cm126d partitions stat 1 sched_debug swaps uptime 11 15 2 224 28 37 78 84 93 ovládač config.gz ioports kpagecgroup moduly schedstat sys verzia 12 16 20 226 288 4 79 85 acpi konzoly asloc6r sq2pagecount 3mount v31600mains acpi cpuinfo fb ​​​​kallsyms kpageflags mtrr self sysvipc vmstat 139 176 21 24 290 7 80 87 buddyinfo krypto súborové systémy kcore loadavg net slabinfo vlákno-self zoneinfo
Ako predtým, náš proces tam nie je, čo znamená, že sme v bežnom mennom priestore. Skontrolujte

Ps -e | grep bash
296 bodov / 0 00:00:00 bash

Iba jeden bash, z ktorého sme spustili program. V zozname nie je ani predchádzajúci, ani aktuálny PID.

Správa počítača sa zdá jednoduchá, ale je to tak? Kilometre strojového kódu, organizácia interakcie programov, zdrojov a používateľa. Dôležité je nielen vytvoriť životaschopné prostredie, ale dať mu aj možnosť ďalšieho rozvoja a optimalizácie. Zostáva na vývojároch, aby používali dostupné nástroje.

Funkcie operačného systému

Pred zodpovedaním otázky, čo je pid, je dôležité pochopiť funkčnosť, od ktorej implementácie závisia funkcie identifikátora:

  • práca s údajmi, spúšťanie a zastavovanie softvéru;
  • interakcia so vstupnými / výstupnými zariadeniami;
  • distribúcia a organizácia pamäte s náhodným prístupom;
  • poskytovanie prístupu k nestálym médiám;
  • optimalizácia strojových zdrojov;
  • zabezpečenie bezpečného prístupu každého objektu k zdrojom stroja;
  • spoľahlivá výpočtová technika;
  • ochrana údajov pred škodlivým softvérom a úmyselným hackovaním.


Základné pojmy

Ďalšie rozprávanie bude založené na nižšie uvedených konceptoch. Ignorovanie tohto bodu sťažuje pochopenie toho, čo je pid.

Proces je akýkoľvek objekt, ktorý využíva systémové prostriedky definované normou ISO. 9000: 2000 je súbor operácií, ktorých interakcia konvertuje prichádzajúce údaje na odchádzajúce.

Každý proces je charakterizovaný niekoľkými parametrami:

  • strojový kód;
  • spustiteľný kód;
  • rezervovaný kus pamäte (niekedy virtuálny);
  • bezpečnostné atribúty;
  • vstupné / výstupné údaje;
  • zásobník hovorov, ktorý monitoruje aktivitu každého objektu;
  • takzvaná "hromada", ktorá uchováva medzivýsledky operácií a výpočtov.

Proces vytvára operačný systém od momentu jeho spustenia alebo keď je o to požiadaný. Dokončenie prebieha zhromaždením štatistických informácií, následným odstránením a interakciou s plánovacím frontom a prideľovaním zdrojov. Po dokončení teoretického základu je čas odpovedať na najdôležitejšiu otázku, čo je pid.

Koncept identifikátora

Každý spustený program je identifikovaný alebo rozpoznaný jedinečným číslom s tagom. Systém teda interaguje s každým procesom.

Ak sa chcete bližšie pozrieť na ukazovateľ, môžete ísť dvoma spôsobmi:

  1. Správcu úloh vyvoláme pravým tlačidlom myši na paneli úloh. Ďalej prejdite na kartu "Procesy" a vyberte ponuku "Zobraziť". Nájdeme položku "Vybrať stĺpce", v dialógovom okne, ktoré sa otvorí, zaškrtnite PID. Na príkazovom riadku napíšte zoznam úloh.
  2. Ďalšia taktika platí aj pre systémy Unix. Tu sa odporúča použiť príkaz ps. S jeho pomocou môžete nájsť identifikátor pre konkrétny program.

Na vyhľadávanie potenciálne škodlivého softvéru je povolené používať jedinečné číslo. Faktom je, že vírusy sú často maskované ako „slušné“ súbory, zatiaľ čo ukazovateľ poskytuje jasnú predstavu o bezpečnosti predmetného objektu. Musíte len vedieť rozpoznať "čo je pid" z kódového prúdu systémových a menej významných procesov.

Moderné programovacie jazyky umožňujú „izolovať“ informácie o objekte záujmu od bežného čísla. Na programovej úrovni môžete vyvinúť kód, ktorý priamo interaguje s pid. Čo to robí? Za cenu niekoľkých kliknutí budete môcť zobraziť celú cestu k súboru alebo programu, ktorý vás zaujíma. V skutočnosti to umožní nielen pochopiť a optimalizovať fungovanie systému (množstvo požadovaných zdrojov), ale aj chrániť stroj pred potenciálnou hrozbou.

Aby nedošlo k zámene

V elektronike existuje aj pid-controller - elektronické zariadenie používané v automatických riadiacich systémoch. Umožňuje nielen generovať riadiaci signál, ale aj ovplyvňovať presnosť a kvalitu prechodového procesu.

Mnoho používateľov si tieto dva pojmy zamieňa, no sú úplne odlišné. Po prečítaní článku by sa mala konečne vyriešiť otázka „aký je pid procesu“, pretože uvedené informácie poskytujú úplný popis a možnosti ukazovateľa. Je dôležité pochopiť, že fungovanie "operačného systému" priamo závisí od každej skrutky základného systému. Dnes sa uvažovalo len o malej časti počítača ako o stroji.

Myslíte si, že sa operačný systém Linux dokáže postarať sám o seba automaticky? Keď všetko funguje dobre alebo nepotrebujete žiadne neštandardné funkcie, áno. Niekedy však môže byť potrebný váš zásah do jej práce.

V Linuxe sa pre každý jednotlivý program pri spustení vytvorí proces. Nezáleží na tom, či program spúšťate manuálne sami, alebo to robí systém alebo jadro. Napríklad inicializačný program, ktorý sa spustí hneď po dokončení načítania jadra, má tiež svoj proces s identifikátorom 0. Procesy v linuxe môžeme označiť ako kontajnery, v ktorých sú uložené všetky informácie o stave a vykonávaní programu. . Ak program funguje dobre, potom je všetko v poriadku, ale ak visí alebo ho potrebujete nakonfigurovať, aby fungoval, možno budete musieť spravovať procesy v systéme Linux.

Tento článok bude pokrývať rozsiahlu tému, zvážime tieto možnosti:

  • Zobrazenie spustených procesov
  • Zobrazenie informácií o procesoch
  • Hľadanie procesov v Linuxe
  • Zmena priority procesov
  • Ukončenie procesov
  • Obmedzenie pamäte dostupnej pre proces

Nedalo mi nezaradiť prvé body do článku, no sú veľmi jednoduché a nebudeme ich veľmi podrobne rozoberať. Ale všetko ostatné sa môže zdať komplikované a nedostatočne popísané.

Začnime pochopením pojmov. Proces je v podstate každý program. Ako som povedal, pre každý spustený program sa vytvorí samostatný proces. V rámci procesu je programu pridelený čas procesora, RAM a ďalšie systémové prostriedky. Každý proces má svoj identifikátor, ID procesu alebo jednoducho PID a najčastejšie sú nimi určené linuxové procesy. PID nie je určené náhodou, ako som už povedal, inicializačný program dostane PID 1 a každý ďalší spustený program dostane o jeden viac. PID užívateľských programov tak už dosahuje niekoľko tisíc.

V skutočnosti procesy Linuxu nie sú také abstraktné, ako sa vám teraz zdajú. Je celkom možné pokúsiť sa ich dotknúť. Otvorte správcu súborov, prejdite do koreňového adresára a potom otvorte priečinok / proc. Vidíte tu kopu čísel? Takže to je všetko – PID všetkých spustených procesov. Každý z týchto priečinkov obsahuje všetky informácie o procese.

Pozrime sa napríklad na priečinok procesu 1. V adresároch sú ďalšie a v priečinku je veľa súborov. Súbor cmdline obsahuje informácie o príkaze na spustenie procesu:

cat / proc / 1 / cmdline

/ usr / lib / systemd / systemd

Keďže používam inicializačný systém Systemd, je preň spustený prvý proces. S adresárom / proc sa dá urobiť čokoľvek. To je však veľmi nepohodlné, najmä vzhľadom na počet spustených procesov v systéme. Preto existujú špeciálne nástroje na vykonávanie potrebných úloh. Prejdime k recenzii pomocných programov, ktoré vám umožňujú implementovať riadenie procesov v systéme Linux.

Linuxové riadenie procesov

Linux má veľmi veľké množstvo nástrojov na riešenie rôznych úloh riadenia procesov. Sú to také multifunkčné riešenia ako htop, top, ale aj jednoduché nástroje, napríklad ps, kill, killall, who atď. V tomto článku nebudem uvažovať o grafických nástrojoch a nebudem uvažovať ani o top. Prvý je preto, že je príliš jednoduchý, druhý preto, že htop je lepší. Zameriame sa na prácu s htop a jeho náprotivkami v štýle GNU, jedna utilita jedna funkcia.

Nainštalujte si htop, ak ho ešte nemáte. Ubuntu to robí takto:

sudo apt install htop

Na iných distribúciách stačí použiť správcu balíkov. Názov balíka je rovnaký.

Zobrazenie spustených procesov

Toto je veľmi jednoduchá úloha a je tiež ľahké ju vyriešiť. Existuje na to veľa nástrojov, od bežných ps až po pokročilejšie interaktívne top, htop atď.

Po otvorení htop okamžite vidíme zoznam spustených procesov. Samozrejme, nie sú tu zobrazené všetky linuxové procesy, tých je v systéme veľa, už viete, všetky sa nezmestia na jednu obrazovku. Štandardne sú uvedené procesy spustené ako váš používateľ:

Môžete vidieť nasledujúce informácie o procese:

  • PID- ID procesu
  • POUŽÍVATEĽ- používateľ, od ktorého bol proces spustený
  • PRI- priorita linuxového procesu na úrovni jadra (zvyčajne NI + 20)
  • NI- priorita vykonávania procesu od -20 do 19
  • S- stav procesu
  • CPU- použité zdroje procesora
  • MEM- použitá pamäť
  • ČAS- čas spracovania

K displeju môžete pridať ďalšie parametre, no toto sú tie hlavné. Parametre môžete pridať pomocou ponuky Nastavenie. Všetko je tam veľmi jednoduché, prečítajte si tipy a postupujte podľa pokynov. Napríklad pridaný parameter PPID:

Veľmi dôležitou vlastnosťou programu je, že procesy v Linuxe môžete triediť podľa požadovaného parametra. Stačí kliknúť na názov parametra, ten sa zvýrazní zelenou farbou a vykoná sa triedenie. Napríklad, ak chcete vidieť, v akom poradí boli procesy spustené, zoraďte podľa PID:

Je tu tiež zaujímavá možnosť usporiadať procesy vo forme stromu. Budete môcť vidieť, ktorý proces začal tento alebo ten proces. Stlačením F5 zobrazíte strom:

V podstate to isté môžete urobiť s ps. Iba tu neexistuje taký pohodlný interaktívny režim. Všetko sa robí s možnosťami.

Zvážte hlavné možnosti, ktoré použijeme:

  • -e- zobrazenie informácií o všetkých procesoch
  • -a- zobraziť informácie o všetkých najčastejšie požadovaných procesoch
  • -t- zobraziť iba procesy z tohto terminálu
  • -p- zobraziť informácie iba o zadanom procese
  • -u- zobraziť procesy iba určitého používateľa

Stručne povedané, na zobrazenie všetkých aktuálne aktívnych procesov v linuxe sa používa kombinácia možností aux:

Program zobrazuje všetky rovnaké parametre, len neexistuje žiadne interaktívne rozhranie. Myslíte si, že tu nie je možné zoradiť procesy, ale mýlite sa, môžete. Na to existuje možnosť triedenia. Môžete ich zoradiť podľa ľubovoľného poľa, napríklad:

ps aux --triediť =% pam

Zoznam bude zoradený v opačnom poradí, pričom viac hodnôt bude dole a menej hore. Ak je to potrebné v opačnom poradí, pridajte mínus:

ps aux --sort = -% cpu

Ako triediace pole možno použiť priority procesov Linuxu alebo akékoľvek iné parametre. Výstup môžete tiež skrátiť, ak nepotrebujete zobraziť všetky informácie:

Zdalo by sa, že ps nemá spôsob, ako kalkulovať procesné stromy. Ale nie naozaj, na to existuje samostatný príkaz:

Hľadanie procesov v Linuxe

Zoznam procesov je dobrý. Ale niekedy, keď sa proces zasekne a potrebujeme zabiť linuxový proces alebo s ním potrebujeme vykonať nejakú akciu, musíme tento proces vybrať zo zoznamu, zistiť jeho PID a informácie o ňom.

Na nájdenie linuxového procesu v htop môžete použiť kláves F3. Stlačte F3 a zadajte požadované slovo. Ďalej, ak chcete prejsť na ďalší výskyt, stlačte F2 alebo Esc na dokončenie vyhľadávania:

Môžete tiež použiť filter htop na nájdenie procesov v htop. Stlačte F4, zadajte slovo a zobrazia sa iba linuxové procesy, ktorých názov obsahuje toto slovo.

V ps nie je žiadne filtrovanie, ale môžeme použiť grep presmerovaním výstupu ps naň, aby sme našli linuxový proces:

ps aux | grep chróm

Toto je veľmi často používaný príkaz.

Zmena priority procesov

Priorita linuxového procesu znamená, o koľko viac času CPU bude venované tomuto procesu v porovnaní s ostatnými. Môžeme teda veľmi jemne vyladiť, ktorý program bude bežať rýchlejšie a ktorý pomalšie. Hodnota priority sa môže pohybovať od 19 (minimálna priorita) do -20 - maximálna priorita linuxového procesu. Okrem toho môžete znížiť prioritu s právami bežného používateľa, ale na jej zvýšenie potrebujete práva superužívateľa.

Htop používa parameter Nice na riadenie priority. Dovoľte mi pripomenúť, že Priv je len pozmeňujúci a doplňujúci návrh, vo väčšine prípadov je to viac ako Nice o 20. Ak chcete zmeniť prioritu procesu, jednoducho naň umiestnite kurzor a stlačte F7 pre zníženie čísla (zvýšenie priority) alebo F8 na zvýšenie počtu.

Ale ani na túto úlohu riadenia procesov Linuxu nemusíte používať htop. Všetko môžete urobiť pomocou iných príkazov. Napríklad pekný príkaz. Pomocou neho môžete určiť prioritu spusteného procesu:

pekný -n 10 apt-get upgrade

Alebo zmeňte prioritu existujúcej pomocou jej pid:

renice -n 10 -p 1343

Ukončenie procesov v Linuxe

Ak proces zamrzne a nereaguje, musí sa ukončiť. V htop na zabitie procesu Linux jednoducho umiestnite kurzor na proces a stlačte F9:

Systém používa určité signály na riadenie procesov, existujú signály, ktoré naznačujú ukončenie procesu. Tu je niekoľko základných signálov:

  • SIGKILL- požiadajte proces o uloženie údajov a ukončenie
  • SIGTERM- okamžite ukončiť proces bez uloženia

Vo všeobecnosti existuje niekoľko desiatok signálov, ale nebudeme ich brať do úvahy. Pošlime signál SIGKILL:

Môžete tiež použiť nástroj na zabíjanie:

Proces môžete zabiť aj podľa názvu:

killall chróm

Obmedzujúce procesy

Linuxové riadenie procesov vám umožňuje ovládať takmer všetko. Už ste videli, čo sa dá urobiť, ale dá sa urobiť viac. Pomocou príkazu ulimit a konfiguračného súboru /etc/security/limits.conf môžete obmedziť prístup procesov k systémovým prostriedkom, ako je pamäť, súbory a procesor. Môžete napríklad obmedziť pamäť linuxového procesu, počet súborov atď.

Záznam súboru vyzerá takto:

<домен> <тип> <элемент> <значение>

  • doména- používateľské meno, názov skupiny alebo UID
  • Typ- typ obmedzení - mäkké alebo tvrdé
  • element- zdroj, ktorý bude obmedzený
  • význam- požadovaný limit

Pevné limity nastavuje superužívateľ a bežní používatelia ich nemôžu zmeniť. Mäkké, mäkké limity môžu používatelia zmeniť pomocou príkazu ulimit.

Pozrime sa na hlavné obmedzenia, ktoré možno uplatniť na procesy:

  • žiadny súbor
  • ako- maximálne množstvo pamäte RAM
  • stoh- maximálna veľkosť zásobníka
  • CPU- maximálny čas procesora
  • nproc- maximálny počet jadier procesora
  • zámky- počet uzamknutých súborov
  • pekný- maximálna priorita procesu

Napríklad obmedzme čas procesora pre procesy používateľa sergiy:

sergiy tvrdý nproc 20

Obmedzenia pre konkrétny proces si môžete pozrieť v priečinku proc:

cat / proc / PID / limity

Maximálny čas procesora neobmedzený, neobmedzený počet sekúnd
Maximálna veľkosť súboru neobmedzená, neobmedzený počet bajtov
Maximálna veľkosť dát neobmedzená neobmedzený počet bajtov
Maximálna veľkosť zásobníka 204 800 neobmedzených bajtov
Maximálna veľkosť súboru jadra 0 neobmedzených bajtov
Max rezidentná sada neobmedzene neobmedzene bajtov
Max procesov 23562 23562 procesov
Maximálny počet otvorených súborov je 1024 4096 súborov
Maximálna uzamknutá pamäť 18446744073708503040 18446744073708503040 bajtov
Maximálny adresný priestor neobmedzený neobmedzený počet bajtov
Max súbor uzamkne neobmedzené neobmedzené zámky
Max. počet čakajúcich signálov 23562 23562 signálov
Maximálna veľkosť frontu správ 819200 819200 bajtov
Maximálna priorita 0 0
Maximálna priorita v reálnom čase 0 0
Maximálny časový limit v reálnom čase neobmedzený a neobmedzený nás

Takto zmenené obmedzenia sa prejavia po reštarte. Ale môžeme tiež nastaviť limity pre aktuálny shell a procesy, ktoré vytvára pomocou príkazu ulimit.

Tu sú možnosti príkazov:

  • -S- mäkké obmedzenie
  • -H- tvrdý limit
  • -a- zobraziť všetky informácie
  • -f- maximálna veľkosť vytvorených súborov
  • -n- maximálny počet otvorených súborov
  • -s- maximálna veľkosť zásobníka
  • -t- maximálny čas procesora
  • -u- maximálny počet spustených procesov
  • -v- maximálne množstvo virtuálnej pamäte

Napríklad môžeme nastaviť nový limit na počet súborov, ktoré je možné otvoriť:

Teraz sa pozrieme:

Nastavíme limit RAM:

ulimit -Sv 500 000

Dovoľte mi pripomenúť, že toto obmedzenie bude relevantné pre všetky programy spustené v tomto termináli.

závery

To je všetko. Správa procesov v systéme Linux vám teraz nespôsobí žiadne problémy. Tejto téme sme sa venovali veľmi podrobne. Ak máte nejaké otázky alebo návrhy na doplnenie článku, napíšte do komentárov!