Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Fier
  • Cum să omorâți un proces în Linux. Controlul procesului Linux

Cum să omorâți un proces în Linux. Controlul procesului Linux

În acest articol vom încerca să creăm un modul kernel care poate modifica PID-ul unui proces care rulează deja în Linux, precum și să experimentăm procese care au primit un PID modificat.


Avertizare: Modificarea PID-ului este un proces non-standard și, în anumite circumstanțe, poate duce la panica nucleului.

Unitatea noastră de testare va implementa dispozitivul de caractere / dev / test, care va schimba PID-ul procesului atunci când este citit. Pentru un exemplu de implementare a unui dispozitiv de caractere, datorită acestui articol. Codul complet al modulului este dat la sfârșitul articolului. Desigur, cea mai corectă soluție a fost adăugarea unui apel de sistem la nucleul în sine, dar aceasta ar necesita o recompilare a nucleului.

Mediu inconjurator

Toți pașii pentru testarea modulului au fost efectuati într-o mașină virtuală VirtualBox cu o distribuție Linux pe 64 de biți și versiunea de kernel 4.14.4-1. Comunicarea cu mașina a fost realizată folosind SSH.

Încercați # 1 soluție simplă

Câteva cuvinte despre curent: variabila curent indică o structură task_struct cu o descriere a procesului din nucleu (PID, UID, GID, cmdline, spații de nume etc.)

Prima idee a fost să schimbăm pur și simplu parametrul curent-> pid din modulul kernel în cel dorit.

Dimensiunea statică_t device_read (fișier struct * filp, char * buffer, size_t lungime, loff_t * offset) (printk ("PID:% d. \ N", curent-> pid); curent-> pid = 1; printk ("nou PID:% d. \ N ", curent-> pid);,)
Pentru a testa funcționalitatea modulului, am scris un program în 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); }
Încărcați modulul cu insmod, create / dev / test și încercați.

# ./a.out PID-ul meu părinte 293 PID-ul meu 782 Noul meu PID 782
PID-ul nu s-a schimbat. Este posibil să nu fie singurul loc în care PID-ul este listat.

Încercați numărul 2 câmpuri PID suplimentare

Dacă curent-> pid nu este id-ul procesului, atunci ce este? O privire rapidă asupra codului getpid () a indicat structura task_struct care descrie procesul Linux și fișierul pid.c din sursa kernelului. Funcția necesară este __task_pid_nr_ns. Codul funcției conține apelul task-> pids.pid, vom modifica acest parametru

Compilând, încercând

De când am testat prin SSH, am putut obține rezultatul programului înainte ca nucleul să se prăbușească:

PID-ul meu părinte 293 PID-ul meu 1689 Noul meu PID 1689
Primul rezultat este deja ceva. Dar PID-ul încă nu s-a schimbat.

Încercați # 3 simboluri kernel neexportate

O privire mai atentă la pid.c a dat o funcție care face ceea ce vrem.
static void __change_pid (struct task_struct * task, enum pid_type type,
struct pid * nou)
Funcția acceptă o sarcină pentru care este necesar să se schimbe PID-ul, tipul PID și, de fapt, noul PID. Noul PID este creat de funcție
struct pid * alloc_pid (struct pid_namespace * ns)

Această funcție acceptă doar spațiul de nume în care va fi noul PID, acest spațiu poate fi obținut folosind task_active_pid_ns.
Dar există o problemă: aceste simboluri ale nucleului nu sunt exportate de nucleu și nu pot fi folosite în module. În rezolvarea acestei probleme, una minunată m-a ajutat. Codul funcției find_sym este preluat de acolo.

Static asmlinkage void (* change_pidR) (struct task_struct * task, enum pid_type type, struct pid * pid); static asmlinkage struct pid * (* alloc_pidR) (struct pid_namespace * ns); static int __init test_init (void) (printk (KERN_ALERT "Driverul TEST încărcat! \ n"); change_pidR = find_sym ("change_pid"); alloc_pidR = find_sym ("alloc_pid"); ...) static ssize_t device_read (fișier struct * filp, char * buffer, size_t length, loff_t * offset) (printk ("PID:% d. \ n", curent-> pid); struct pid * newpid; newpid = alloc_pidR (task_active_pid_ns (current)); change_pidR (current) , PIDTYPE_PID, newpid); printk ("nou PID:% d. \ N", curent-> pid); ...)
Compliment, lansare

PID-ul meu părinte 299 PID-ul meu 750 Noul meu PID 751
PID schimbat! Nucleul a alocat automat un PID gratuit programului nostru. Dar este posibil să folosiți un PID pe care un alt proces l-a preluat, cum ar fi PID 1? Adăugați cod după alocare

Newpid-> numere.nr = 1;
Compliment, lansare

PID-ul meu părinte 314 PID-ul meu 1172 Noul meu PID 1
Primim adevăratul PID 1!

Bash a dat o eroare în care comutarea sarcinii la comanda% n nu va funcționa, dar toate celelalte funcții funcționează bine.

Caracteristici interesante ale proceselor cu PID modificat

PID 0: enter nu poate fi ieșit

Să revenim la cod și să schimbăm PID-ul la 0.

Newpid-> numere.nr = 0;
Compliment, lansare

PID-ul meu părinte284 PID-ul meu 1517 Noul meu PID 0
Deci PID 0 nu este atât de special? Suntem fericiți, scrieți exit și...

Miezul cade! Nucleul a definit sarcina noastră ca IDLE TASK și când s-a văzut finalizată, sa prăbușit. Aparent, înainte de terminare, programul nostru ar trebui să revină la el însuși PID-ul „normal”.

Procesul invizibil

Să revenim la cod și să setăm PID-ul, care este garantat neocupat
newpid-> numere.nr = 12345;

Compliment, lansare

PID-ul meu părinte 296 PID-ul meu 735 Noul meu PID 12345
Să vedem ce este în / proc

1 148 19 224 288 37 79 86 93 console fb kcore blocuri partiții schimburi versiunea 10 149 2 226 29 4 8 87 acpi cpuinfo sisteme de fișiere utilizatori cheie meminfo sched_debug sys vmallocinfo cheie criptată 1280215 1280215 2800215 declanșare vmstat 11 16 208 24 291 6 81 89 dispozitive buddyinfo întrerupe module kmsg scsi sysvipc zoneinfo 12 17 21 25 296 7 82 9 magistrală diskstats iomem kpagecgroup se montează self-thread-self 13 13 037 076 mtlist 13 03 7376 mt. 139 18 22 27 30 76 84 91 cmdline driver irq kpageflags net softirqs tty 14 182 222 28 31 78 85 92 config.gz execdomains kallsyms loadavg pagetypeinfo stat uptime
După cum puteți vedea, / proc nu definește procesul nostru, chiar dacă am împrumutat un PID gratuit. Nici PID-ul anterior nu este in / proc, ceea ce este foarte ciudat. Este posibil să fim într-un spațiu de nume diferit și, prin urmare, să nu fie vizibili pentru principal/proc. Să instalăm noul / proc și să vedem ce este acolo

1 14 18 210 25 291 738 81 9 dispozitive de magistrală fs cheie utilizatori încuietori pagetypeinfo softirqs timer_list 10 148 182 22 26 296 741 82 90 cgroups diskstats întreruperi chei statistice memd info 2 cmd 912 912 912 902 sched_debug schimbă timpul de funcționare 11 15 2 224 28 37 78 84 93 driver config.gz ioports kpagecgroup module schedstat sys versiunea 12 16 20 226 288 4 79 85 acpi consoles execdomains 68687 85 85 85 acpi consoles execdomains 6807 8607 6000000000000000000000001 cpuinfo fb ​​​​kallsyms kpageflags mtrr self sysvipc vmstat 139 176 21 24 290 7 80 87 buddyinfo sisteme de fișiere cripto kcore loadavg net slabinfo thread-self zoneinfo
Ca și înainte, procesul nostru nu este acolo, ceea ce înseamnă că ne aflăm într-un spațiu de nume obișnuit. Verifica

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

Un singur bash, din care am rulat programul. Nici PID-ul anterior, nici cel actual nu sunt în listă.

Există momente în care aplicația începe să se defecteze și, odată cu ea, întregul mediu de lucru, desigur, puteți reporni computerul, iar funcționalitatea în sine va dispărea, dar aceasta nu este o opțiune pentru a reporni computerul de fiecare dată. Și pentru aceasta există o comandă Ucide pentru a vă ajuta să opriți procesul de congelare.

Echipă Ucide poate fi folosit pentru a ucide sau a termina un proces folosind „Semnal” sau „PID”. Comanda Kill trimite semnalul specificat pentru a opri aplicația care se comportă greșit. Dacă nu este specificat niciun semnal, este trimis semnalul TERM. Acest semnal TERM va ucide procesele care nu îl prind; pentru alte procese poate fi necesar să se utilizeze semnalul Kill (numărul 9), deoarece acest semnal nu poate fi interceptat.

SIGTERM este un semnal care solicită oprirea procesului. Acest proces are un timp pentru a-și finaliza activitatea.

Ei bine, cu ajutorul semnalului SIGKILL, putem forța procesul să se termine imediat. Și Programul nu are dreptul de a ignora acest semnal și închide aplicația.

Următorul este formatul comenzii Kill:

ucide [-semnal | -s signal] pid...

Cel mai simplu mod de a ucide un proces este să găsiți PID-ul resursei și apoi să rulați PID-ul ca argument cu comanda Kill.

Ce este PID?

Fiecărui proces sau program Linux sau Unix care se execută i se atribuie automat un număr unic de identificare a procesului (PID). PID-ul atribuie automat un număr fiecărui proces din sistem.

Puteți găsi PID-ul unei resurse utilizând comanda „pidof” sau comanda „ps”. Pentru a afla PID-ul unui proces (de exemplu, Firefox) utilizați următoarea comandă

Pidof firefox

De asemenea, puteți utiliza comanda într-o formă diferită:

Ps -A | grep -i firefox

În exemplul de mai sus, este afișat numărul „23814”, care este PID-ul procesului Firefox. Odată ce cunoașteți PID-ul procesului (firefox), puteți utiliza comanda Kill pentru a opri procesul (Firefox), așa cum se arată mai jos.

Ucide 23814

Când comanda efectuează distrugere, adică trimite un semnal procesului al cărui PID este transmis împreună cu comanda ca argument.

Pentru a fi mai specific, comanda Kill are următoarele forme:

  • ucide PID
  • ucide -15 PID
  • ucide -9 PID
  • kill -SIGTERM PID
  • kill -SIGTERM PID

Comanda Kill are următoarele coduri de returnare:

  • 0 - la succes
  • 1 - eșec
  • 64 - succes parțial (dacă sunt specificate mai multe procese)

O altă comandă pe care o poți folosi este Omoara-i pe toti... Killall folosește, de asemenea, numele procesului în loc de PID și ucide toate instanțele procesului cu acel nume. De exemplu, dacă ați pornit mai multe instanțe de Firefox, le puteți termina pe toate cu comanda

Ucide-l pe firefox

Pentru serverul X, există o altă comandă numită Xkill care poate ucide procesele. Comanda Xkill este pentru modul grafic, fără a trece prin numele procesului sau PID, adică dacă rulați într-un terminal

atunci veți avea o cruce, cu care puteți încheia un program care nu funcționează prin simplul clic pe el.

Este atât de simplu și ușor să omorâți procesele pe sistemele de operare GNU/Linux.

Sistemul de operare UNIX Robachevsky Andrey M.

ID proces ID proces (PID)

Fiecare proces are un PID unic care permite nucleului să facă distincția între procese. Când este creat un nou proces, nucleul îi atribuie următorul identificator liber (adică, nu este asociat cu niciun proces). Atribuirea identificatorilor este ascendentă, i.e. ID-ul noului proces este mai mare decât ID-ul procesului creat înainte de acesta. Dacă identificatorul a atins valoarea maximă, următorul proces va primi PID-ul minim gratuit și ciclul se repetă. Când procesul se termină, nucleul eliberează identificatorul pe care îl ocupa.

Din cartea Arhitectura sistemului de operare UNIX autorul Bach Maurice J.

4.4 CONVERTIREA NUMELE COMPOSITE AL UNUI FIȘIER (CALEA DE CĂUTARE) ÎNTR-UN ID INDEX Un fișier este inițial accesat prin numele său compus (numele căii de căutare), ca în comenzile open, chdir (modificare director) sau link. Deoarece pe plan intern, nucleul funcționează cu indici și nu cu

Din cartea O profesie rară autorul Zuev Evgeniy

Ce este un identificator? Pe lângă ambiguitățile de sintaxă, au apărut rapid și alte supărări. Este mai greu să le arăți prin exemple, așa că trebuie să vorbești în cuvinte.Sintaxa limbajului C++ este incomod și în altă privință. Pe scurt, direct

Din cartea Programare autorul Kozlova Irina Sergheevna

11. Identificator. Cuvinte cheie Un identificator este o succesiune de numere, litere și caractere speciale. În acest caz, primul este o literă sau un caracter special. Pentru a obține identificatori, puteți utiliza litere mici sau mari ale alfabetului latin.

Din cartea celor mai bune 200 de programe pentru internet. Tutorial popular autorul Krainsky I

Process Guardian XP Producător: T.A.S. Programare independentă (http://www.tas-independent-programming.com) Stare: Link de descărcare gratuită: http://www.tas-independent-programming.com/cgi-bin/countdown.pl?Guardian exe. Dimensiune: 2,4 MB. Scopul principal al acestui utilitar este gestionarea proceselor care rulează pe computer.

Din cartea Microsoft Visual C ++ și MFC. Programare pentru Windows 95 și Windows NT autorul Frolov Alexandru Viaceslavovici

Deschideți identificatorul fișierului Clasa CFile include elementul de date m_hFile de tip UINT. Stochează identificatorul fișierului deschis. Dacă ați creat un obiect din clasa CFile, dar nu ați deschis încă niciun fișier, atunci constanta hFileNull este scrisă în m_hFile.De obicei nu este necesar

Din cartea UNIX: Process Communication autorul Stevens William Richard

ID-ul tranzacției O altă parte a strategiei de timeout și retransmisie este utilizarea ID-urilor de tranzacție (XID) pentru a distinge între cererile client și răspunsurile serverului. Când clientul apelează funcția RPC, biblioteca atribuie aceasta

Din cartea Arhitectura TCP / IP, Protocoale, Implementare (inclusiv IP versiunea 6 și IP Security) de Faith Sidney M

16.7 Marcaj temporal și ID mesaj Când primiți e-mail, este interesant să știți ora la care a fost trimis și primit. SMTP adaugă aceste informații la mesajul redirecționat. În plus, acest protocol ține evidența tuturor gazdelor care au trimis mesajul de e-mail și ora

Din cartea tutorial Adobe Audition 3 autorul autor necunoscut

Dynamic EQ (proces) Efectul Dynamic EQ variază cantitatea de filtrare în timp. De exemplu, în prima jumătate a valului, puteți crește frecvențele înalte, iar în a doua, puteți modifica lățimea benzii de frecvență afectate. Fereastra Dynamic EQ are trei file: Câștig, Frecvență și Q (lățime de bandă). 1. Graficul de frecvență

Din cartea PHP Author's Reference

Pan / Expander (proces) Efectul Pan / Expand vă permite să mutați canalul central (mono) din semnalul stereo și să extindeți sau să restrângeți separarea stereo dintre canalele stânga și dreapta. Canalul central este deplasat folosind centrul și canalele surround ale înregistrării stereo.

Din cartea Dezvoltarea de aplicații în Linux. A doua editie autorul Johnson Michael K.

Stretch (proces) Efectul Stretch vă permite să schimbați înălțimea (înălțimea) unui semnal audio, tempo-ul sau ambele. De exemplu, puteți utiliza acest efect pentru a crește înălțimea unei fonograme fără a-i modifica durata sau invers, pentru a schimba durata fără a modifica

Din cartea Firebird DATABASE DESIGNER'S GHIDE de Borri Helen

ID de sesiune Deci, ID-ul de sesiune este numele stocării temporare care va fi folosită pentru a stoca datele de sesiune între rulările de script. Un SID - un magazin. Fără SID, fără stocare și invers. Deci, cum este asociat identificatorul și numele?

Din cartea Sistem de operare UNIX autorul Robachevsky Andrey M.

10.2.1. ID-ul procesului și descendența Două dintre cele mai fundamentale atribute sunt ID-ul procesului, sau pid, și ID-ul procesului părinte. Pid este un număr întreg pozitiv care identifică în mod unic

Din cartea autorului

10.2.3. Uid-ul sistemului de fișiere În cazuri foarte speciale, un program poate avea nevoie să-și mențină permisiunile root pentru orice, cu excepția accesului la sistemul de fișiere, care folosește uid-ul utilizatorului. Folosit inițial în spațiul serverului Linux NFS

Din cartea autorului

ID de domeniu Când creați un domeniu în baza de date, trebuie să specificați un ID de domeniu care este unic la nivel global în baza de date. Dezvoltatorii folosesc adesea un prefix sau un sufix în identificatorii de domeniu pentru a îmbunătăți documentația. De exemplu: CREATE

Din cartea autorului

Din cartea autorului

Parent Process ID (PPID) Identificatorul procesului care a generat acest lucru

Crezi că sistemul de operare Linux se poate îngriji automat? Când totul funcționează bine sau nu aveți nevoie de caracteristici non-standard, da. Dar uneori poate fi necesară intervenția ta în munca ei.

În Linux, pentru fiecare program individual, un proces este creat atunci când acesta începe. Nu contează dacă rulați manual programul sau sistemul sau nucleul o face. De exemplu, programul de inițializare, care este lansat imediat după ce nucleul a terminat de încărcat, are și propriul proces cu identificatorul 0. Procesele din linux pot fi descrise ca containere în care sunt stocate toate informațiile despre starea și execuția programului. . Dacă programul funcționează bine, atunci totul este în regulă, dar dacă se blochează sau trebuie să-l configurați pentru a funcționa, poate fi necesar să gestionați procesele în Linux.

Acest articol va acoperi un subiect amplu, vom lua în considerare astfel de posibilități:

  • Vizualizați procesele în derulare
  • Vizualizarea informațiilor despre procese
  • Găsirea proceselor în Linux
  • Modificarea priorității proceselor
  • Încheierea proceselor
  • Limitarea memoriei disponibile la un proces

Nu am putut să nu includ primele puncte în articol, dar sunt foarte simple și nu le vom analiza în detaliu. Dar totul poate părea complicat și insuficient descris.

Să începem prin a înțelege termenii. Practic, un proces este fiecare program. După cum am spus, un proces separat este creat pentru fiecare program care este lansat. Ca parte a procesului, programului i se alocă timp procesor, RAM și alte resurse de sistem. Fiecare proces are propriul său identificator, ID de proces sau pur și simplu PID și cel mai adesea procesele Linux sunt determinate de acestea. PID-ul nu este determinat întâmplător, așa cum am spus deja, programul de inițializare primește PID 1, iar fiecare program următor care este lansat primește încă unul. Astfel, PID-ul programelor utilizator ajunge deja la câteva mii.

De fapt, procesele Linux nu sunt atât de abstracte pe cât vi se par acum. Este foarte posibil să încerci să le atingi. Deschideți managerul de fișiere, accesați directorul rădăcină, apoi deschideți folderul / proc. Vezi o grămadă de numere aici? Deci, asta e tot - PID-ul tuturor proceselor care rulează. Fiecare dintre aceste foldere conține toate informațiile despre proces.

De exemplu, să ne uităm la folderul procesului 1. Există altele în directoare și o mulțime de fișiere în folder. Fișierul cmdline conține informații despre comanda de pornire a procesului:

cat / proc / 1 / cmdline

/ usr / lib / systemd / systemd

Din moment ce folosesc sistemul Systemd init, primul proces este lansat pentru acesta. Orice se poate face cu directorul /proc. Dar acest lucru este foarte incomod, mai ales având în vedere numărul de procese care rulează pe sistem. Prin urmare, există utilități speciale pentru implementarea sarcinilor necesare. Să trecem la revizuirea utilităților care vă permit să implementați controlul procesului în Linux.

Controlul procesului Linux

Linux are un număr foarte mare de utilitare pentru rezolvarea diferitelor sarcini de gestionare a proceselor. Acestea sunt soluții multifuncționale precum htop, top, precum și utilități simple, de exemplu, ps, kill, killall, who, etc. Nu voi lua în considerare utilitățile grafice în acest articol și nici nu voi lua în considerare top. Primul este pentru că este prea simplu, al doilea pentru că htop este mai bun. Ne vom concentra pe lucrul cu htop și cu omologii săi utilitar în stil GNU, un utilitar o funcție.

Hai să instalăm htop dacă nu îl aveți deja. Ubuntu face așa:

sudo apt install htop

Pe alte distribuții, trebuie doar să utilizați managerul de pachete. Numele pachetului este același.

Vizualizați procesele în derulare

Aceasta este o sarcină foarte simplă și, de asemenea, este ușor de rezolvat. Există multe utilități pentru acest lucru, de la ps obișnuit până la top interactiv mai avansat, htop și așa mai departe.

Deschizând htop, vedem imediat o listă de procese care rulează. Desigur, nu toate procesele Linux sunt afișate aici, există o mulțime de ele în sistem, știți deja, nu vor încadra toate pe un singur ecran. În mod implicit, procesele lansate ca utilizator sunt listate:

Puteți vedea următoarele informații despre proces:

  • PID- ID proces
  • UTILIZATOR- utilizatorul de la care a început procesul
  • PRI- prioritatea procesului linux la nivel de kernel (de obicei NI + 20)
  • NI- prioritatea executiei procesului de la -20 la 19
  • S- starea procesului
  • CPU- resursele procesor utilizate
  • MEM- memorie folosită
  • TIMP- timpul procesului

Puteți adăuga parametri suplimentari pe afișaj, dar aceștia sunt principalii. Puteți adăuga parametri utilizând meniul Setup. Totul este foarte simplu acolo, citiți sfaturile și urmați instrucțiunile. De exemplu, a adăugat parametrul PPID:

O caracteristică foarte importantă a programului este că puteți sorta procesele în Linux după parametrul dorit. Doar faceți clic pe numele parametrului, acesta va fi evidențiat în verde și sortarea va fi efectuată. De exemplu, dacă doriți să vedeți în ce ordine au fost pornite procesele, sortați după PID:

Există, de asemenea, o oportunitate interesantă de a aranja procese sub formă de copac. Veți putea vedea ce proces a început acest sau acel proces. Apăsați F5 pentru a afișa arborele:

Poți face cam același lucru cu ps. Numai că aici nu există un mod interactiv atât de convenabil. Totul se face cu opțiuni.

Să luăm în considerare principalele opțiuni pe care le vom folosi:

  • -e- afișați informații despre toate procesele
  • -A- afișați informații despre toate procesele cele mai frecvent solicitate
  • -t- afișați numai procesele din acest terminal
  • -p- afișați informații numai despre procesul specificat
  • -u- arată procesele doar pentru un anumit utilizator

Pe scurt, pentru a vizualiza toate procesele active în prezent în Linux, se folosește o combinație de opțiuni auxiliare:

Programul arată toți aceiași parametri, doar că nu există o interfață interactivă. Crezi că este imposibil să sortezi procesele aici, dar te înșeli, poți. Există o opțiune de sortare pentru aceasta. Le puteți sorta după orice câmp, de exemplu:

ps aux --sort =% mem

Lista va fi sortată în ordine inversă, cu mai multe valori în partea de jos și mai puține în partea de sus. Dacă este necesar în ordine inversă, adăugați un minus:

ps aux --sort = -% cpu

Prioritățile procesului Linux sau orice alți parametri pot fi utilizați ca câmp de sortare. De asemenea, puteți trunchia rezultatul dacă nu trebuie să afișați toate informațiile:

S-ar părea că ps nu are nicio modalitate de a calcula costurile arborilor de proces. Dar nu chiar, există o comandă separată pentru aceasta:

Găsirea proceselor în Linux

Lista proceselor este bună. Dar uneori, când un proces se blochează și trebuie să omorâm procesul Linux sau trebuie să efectuăm o acțiune cu el, trebuie să selectăm acest proces din listă, să aflăm PID-ul său și informații despre acesta.

Puteți folosi tasta F3 pentru a găsi procesul Linux în htop. Apăsați F3 și introduceți cuvântul dorit. Apoi, pentru a trece la următoarea apariție, apăsați F2 sau Esc pentru a finaliza căutarea:

De asemenea, puteți utiliza filtrul htop pentru a găsi procese în htop. Apăsați F4, introduceți un cuvânt și vor fi afișate numai procesele Linux al căror nume include acest cuvânt.

Nu există nicio filtrare în ps, dar putem folosi grep redirecționând ieșirea ps către acesta pentru a găsi procesul Linux:

ps aux | crom grep

Aceasta este o comandă folosită foarte des.

Modificarea priorității proceselor

Prioritatea procesului Linux înseamnă cât mai mult timp CPU va fi dedicat acestui proces în comparație cu altele. Deci putem regla foarte fin care program va rula mai repede și care va fi mai lent. Valoarea priorității poate varia de la 19 (prioritate minimă) la -20 - prioritatea maximă a procesului Linux. Mai mult, puteți reduce prioritatea cu drepturile unui utilizator obișnuit, dar pentru a o crește, aveți nevoie de drepturi de superutilizator.

Htop folosește parametrul Nice pentru a controla prioritatea. Permiteți-mi să vă reamintesc că Priv este doar un amendament, în cele mai multe cazuri este mai mult decât Nice cu 20. Pentru a schimba prioritatea unui proces, pur și simplu plasați cursorul pe el și apăsați F7 pentru a micșora numărul (mărește prioritatea) sau F8 pentru a crește numărul.

Dar nu trebuie să utilizați htop nici pentru această sarcină de control al procesului Linux. Puteți face totul cu alte comenzi. De exemplu, comanda frumoasă. Folosind-o, puteți specifica prioritatea procesului început:

frumos -n 10 apt-get upgrade

Sau schimbați prioritatea pentru una existentă după codul său:

renice -n 10 -p 1343

Încheierea proceselor în Linux

Dacă procesul este înghețat și nu răspunde, acesta trebuie încheiat. În htop, pentru a opri un proces Linux, poziționați pur și simplu cursorul peste proces și apăsați F9:

Sistemul folosește anumite semnale pentru a controla procesele, există semnale care indică încheierea procesului. Iată câteva semnale de bază:

  • SIGKILL- cereți procesului să salveze datele și să se încheie
  • SIGTERM- încheiați imediat procesul, fără a salva

În general, există câteva zeci de semnale, dar nu le vom lua în considerare. Să trimitem semnalul SIGKILL:

De asemenea, puteți utiliza utilitarul kill:

De asemenea, puteți închide procesul după nume:

ucide cromul

Limitarea proceselor

Controlul proceselor Linux vă permite să controlați aproape totul. Ați văzut deja ce se poate face, dar se pot face mai multe. Cu comanda ulimit și fișierul de configurare /etc/security/limits.conf, puteți restricționa accesul proceselor la resursele sistemului, cum ar fi memoria, fișierele și procesorul. De exemplu, puteți limita memoria unui proces Linux, numărul de fișiere etc.

Intrarea fișierului arată astfel:

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

  • domeniu- nume de utilizator, nume de grup sau UID
  • un fel- tip de restricții - moi sau dure
  • element- o resursă care va fi limitată
  • sens- limita cerută

Limitele dure sunt stabilite de superutilizator și nu pot fi modificate de utilizatorii obișnuiți. Limitele soft, soft pot fi modificate de către utilizatori folosind comanda ulimit.

Să luăm în considerare principalele restricții care pot fi aplicate proceselor:

  • niciun fisier
  • la fel de- cantitatea maximă de RAM
  • grămadă- dimensiunea maximă a stivei
  • CPU- timp maxim de procesor
  • nproc- numărul maxim de nuclee de procesor
  • încuietori- numărul de fișiere blocate
  • Grozav- prioritatea maximă a procesului

De exemplu, să limităm timpul procesorului pentru procesele utilizatorului sergiy:

sergiy hard nproc 20

Puteți vizualiza restricțiile pentru un anumit proces în folderul proc:

cat / proc / PID / limite

Timp maxim CPU nelimitat secunde nelimitate
Dimensiunea maximă a fișierului nelimitat nelimitat octeți
Dimensiunea maximă a datelor, octeți nelimitați nelimitați
Dimensiunea maximă a stivei 204800 octeți nelimitați
Dimensiunea maximă a fișierului de bază 0 octeți nelimitați
Rezidenți max setați octeți nelimitați nelimitați
Max procese 23562 23562 procese
Max fișiere deschise 1024 4096 fișiere
Memorie maximă blocată 18446744073708503040 18446744073708503040 octeți
Spațiu maxim de adresă nelimitat octeți nelimitați
Blocări maxime de fișiere blocări nelimitate nelimitate
Semnale maxime în așteptare 23562 23562 semnale
Dimensiunea maximă a cozii de mesaje 819200 819200 octeți
Prioritate maximă plăcută 0 0
Prioritate maximă în timp real 0 0
Timeout maxim în timp real nelimitat nelimitat

Restricțiile modificate în acest fel vor intra în vigoare după o repornire. Dar putem stabili și limite pentru shell-ul curent și procesele pe care le creează folosind comanda ulimit.

Iată opțiunile de comandă:

  • -S- limitare soft
  • -H- limită grea
  • -A- afișați toate informațiile
  • -f- dimensiunea maximă a fișierelor create
  • -n- numărul maxim de fișiere deschise
  • -s- dimensiunea maximă a stivei
  • -t- durata maximă a procesorului
  • -u- numărul maxim de procese care rulează
  • -v- cantitate maximă de memorie virtuală

De exemplu, putem seta o nouă limită pentru numărul de fișiere care pot fi deschise:

Acum ne uităm:

Să setăm limita RAM:

ulimit -Sv 500000

Permiteți-mi să vă reamintesc că această limitare va fi relevantă pentru toate programele care rulează în acest terminal.

concluzii

Asta e tot. Acum, gestionarea proceselor în Linux nu vă va da probleme. Am analizat acest subiect în detaliu. Dacă aveți întrebări sau sugestii pentru completarea articolului, scrieți în comentarii!

Instrucțiuni

Protocolul Internet (IP) definește livrarea datelor de la o gazdă la alta. În același timp, nu garantează acuratețea livrării: în timpul transmiterii, pachetele pot fi pierdute sau primite într-o altă ordine decât au fost trimise. Protocolul trans este responsabil pentru acuratețe picior nivel Transmission Control Protocol - TCP. TCP stabilește o conexiune, controlează trimiterea și primirea pachetelor, își dublează acțiunile în cazul în care un răspuns la o solicitare nu este primit sau se pierd pachetele. Este important de înțeles că TCP stabilește schimbul de pachete nu doar între noduri, ci și între aplicațiile software. Portul de rețea este un număr condiționat de la 1 la 65535 care indică aplicației căreia îi este alocat pachetul.

Puteți afla ce procese folosesc porturi pe computer folosind instrumente standard Windows. Din meniul Start, faceți clic pe Run și tastați cmd în linia de comandă. Confirmați cu OK. Într-o fereastră de consolă, tastați netstat -a -n -o.

Coloana PID conține numărul procesului, coloana "" conține adresa IP a computerului dvs. și, separate prin două puncte, numărul portului care este ocupat de procesul corespunzător. „Adresa externă” este IP-ul și numărul de port al nodului la distanță cu care rulează o aplicație.

În fereastra consolei, tastați comanda tasklist. Acesta va lista toate aplicațiile de cod PID care rulează pe computer. În acest fel, vei ști ce proces ocupă orice port al computerului tău.

Puteți obține aceste informații în mod diferit: porniți „Managerul de activități” din linia de comandă tastând taskmgr sau apăsând tastele Ctrl + Alt + Delete. În coloana PID găsiți numărul procesului care vă interesează, în coloana Nume imagine - numele aplicației sau serviciului corespunzător. Dacă PID-ul nu este afișat în fereastra Manager, mergeți la elementul „Vizualizare” din meniul principal și selectați opțiunea „Selectare coloane”. Bifați caseta de lângă ID proces (PID).

Când un proces începe pe computer, acesta primește pid-ul său, adică identificatorul proces... Uneori devine necesar să aflați chiar acest identificator. Poate, dintr-un motiv oarecare, trebuie să dezactivați un proces care rulează, de exemplu, dacă interferează cu dezinstalarea programului. Există mai multe moduri de a afla pid. Cel mai simplu dintre ele este să o faci folosind managerul de activități și linia de comandă.

Vei avea nevoie

  • - un computer cu sistem de operare Windows (XP, Windows 7).

Instrucțiuni

Apăsați ctrl + alt + del de pe tastatură. Dacă sistemul dvs. de operare este Windows XP, atunci managerul de activități va apărea imediat, dacă Windows 7 - va apărea o fereastră în care îl puteți selecta.

În selectați fila „Procese”. Acum, aici, faceți clic pe elementul „Vizualizare”. Va apărea o fereastră suplimentară. În ea, selectați opțiunea „Select Columns”. Va apărea o casetă de dialog în care elementul cel mai de sus va fi numit „ID proces(pid)". Bifați caseta de lângă ea. Salvați setările făcând clic pe OK.

Apoi, în managerul de dispozitive, accesați fila „Procese”, unde veți vedea linia „ID proces". Găsiți numele în el proces, al cărui identificator trebuie să-l aflați și să-i vedeți valoarea.

Acum va fi examinată, această valoare folosind linia de comandă a sistemului de operare. Faceți clic pe butonul „Start” și accesați fila „Toate programele”. Selectați „Programe standard”. Aici găsiți elementul de meniu din linia de comandă și rulați-l. Tastați lista de activități și apăsați pe Enter. După activarea acestei comenzi, în fereastra promptului de comandă va apărea o listă cu toate procesele active în prezent. După numele fiecăruia dintre ele se va scrie identificatorul acestuia.

Dacă trebuie să finalizați rapid procesul, atunci o puteți face astfel. După ce aflați identificatorul proces, tastați taskkill / pid 0000 la linia de comandă. În loc de zerouri, introduceți numărul de identificare proces care se cere „”. După aceea, sistemul va trimite un semnal pentru finalizarea acestuia și va fi oprit.

Notă

Aveți grijă când încheiați procesele. Din neatenție, puteți dezactiva procesul activ, care este necesar pentru funcționarea corectă a sistemului de operare.

Adresarea serverelor de e-mail în The Bat! (ca și în alte programe de e-mail) are loc prin porturi specifice pentru trimiterea și primirea e-mailurilor. Pentru a configura programul de e-mail, trebuie să introduceți numerele de porturi SMTP și POP3, precum și numele serverelor în parametrii casetei.

Vei avea nevoie

  • - date din mail.

Instrucțiuni

Accesați site-ul serverului dvs. de e-mail. De exemplu, serverul dvs. de e-mail este mail.ru. Va trebui să vă autentificați - adică să vă introduceți numele de utilizator și parola - pentru a vă introduce căsuța poștală personală. Găsiți linkul de ajutor și faceți clic pe el.

O listă de subiecte de ajutor este în stânga. Faceți clic pe inscripția „Acces din programele de e-mail” și selectați primul articol pentru a încărca pagina de setări. Pagina indică faptul că numele serverului de e-mail de intrare este pop.mail.ru, iar serverul de ieșire este smtp.mail.ru. Acest lucru se aplică numai acestui serviciu. De regulă, fiecare post server poate avea porturi diferite, așa că accesați site-ul oficial din centrul de asistență și aflați datele. Există și site-uri pe Internet care oferă informații despre aproape toate serviciile care există pe Internet.

Numerele de port ale serverelor de e-mail de ieșire și de intrare sunt listate în partea de jos a paginii. Indică faptul că pentru serverul de e-mail de intrare protocoalele sunt 110 (dacă programul de e-mail funcționează fără criptare) și 995 (cu criptare). Pentru a afla ce număr să introduceți, studiați setările programului dvs. de e-mail. Numărul portului pentru e-mailurile trimise este 25, 587 sau 2525 (dacă expeditorul nu utilizează criptare) și 465 (cu criptare). Porturile standard de e-mail sunt 110 și 25. Numerele standard de porturi pot fi, de asemenea, scrise în program în mod implicit, așa că, dacă este necesar, va trebui să le corectați la cele corecte.

Dacă utilizați un alt server de e-mail, vă rugăm să vizitați site-ul web pentru a obține setările. Parametrii de acest fel sunt întotdeauna publici și de obicei sunt plasați în secțiunea de ajutor. Dacă afacerea dvs. folosește e-mailul corporativ, contactați administratorul de rețea pentru numerele de port.

TCP / IP este o colecție de protocoale, care vă permite să conectați computere și rețele individuale într-o rețea de computere comună. Cu ajutor protocoale TCP / IP Majoritatea aplicațiilor comunică prin Internet.

Top articole similare