Contacte

Cum să ucizi procesul Linux. Cum să ucizi procesul în Linux. $ kill-semnal pid_process

Practic, urmăm PID-uri pentru a ucide un program imunitar și este similar cu Windows Task Manager.

Linux GUI oferă, de asemenea, aceeași funcție, dar CLI - metoda eficientă Efectuarea unei operații de ucidere.

Care este identificatorul procesului PID?

PID denotă un număr de identificare Un proces care este de obicei utilizat de majoritatea miezurilor sistemului de operare, cum ar fi Linux, Unix, MacOS și Windows.

Acesta este un număr unic de identificare care este atribuit automat fiecărui proces atunci când este creat în sistemul de operare.

Procesul este un exemplu executabil al programului.

De fiecare dată când identificatorul procesului va primi modificări ale tuturor proceselor, cu excepția Init, deoarece inițial este întotdeauna primul proces din sistem și este strămoșul tuturor celorlalte procese. Acesta este PID - 1.

Valoarea maximă implicită a PID este de 32.768.

# CAT / proc / sys / kernel / pid_max

În sistemele pe 32 de biți, 32768 este valoarea maximă, dar putem stabili orice valoare la 2 ^ 22 (aproximativ 4 milioane) în sisteme pe 64 de biți.

Puteți întreba de ce avem nevoie de un astfel de PID? Pentru că nu putem reutiliza PID imediat. De asemenea, pentru a evita posibile erori.

PID pentru procesele de rulare în sistem pot fi găsite utilizând următoarele nouă metode, cum ar fi comanda PIDOF, comanda PSP, comanda PSRED, comanda SS, comanda SS, comanda NetStat, comanda LSOF, comanda Fuser, și comanda SystemCTL.

  • pidof: Pidof - Găsiți ID-ul procesului programului de funcționare.
  • pGREP: PGRE - Căutați sau procesați semnale pe baza numelui și a altor atribute.
  • pS: PS - informează instantaneul proceselor actuale.
  • pSTREDE: PSTREDE - Afișează copacul de proces.
  • sS: SS este folosit pentru a afișa statisticile socket.
  • netStat: NetStat afișează o listă de prize deschise.
  • lSOF: LSOF este o listă de fișiere deschise.
  • fUSER: Identificatori de proces în termenii Lista tuturor proceselor care deschid unul sau mai multe fișiere
  • sYSTEMCTL: SystemCTL - Gestionați managerul System și Services

În această lecție, considerăm identificatorul procesului Apache pentru a verifica.

Metoda 1: Utilizarea comenzii PIDOF

pIDOF este folosit pentru a căuta un identificator al procesului de programare a programului.

Afișează aceste identificatori la ieșirea standard.

Pentru a demonstra acest lucru, învățăm identificatorul procesului Apache2 de la sistemul Debian 9.

# PIDOF APACO2. 3754 2594 2365 2364 2363 2362 2361

Din cele de mai sus, puteți întâmpina dificultățile de identificare a ID-ului procesului, deoarece arată toate PID (inclusiv părintele și copilul) cu numele procesului.

Prin urmare, trebuie să aflăm PID-ul părinte (PPID), pe care îl căutăm.

Poate fi primul număr. În cazul meu este 3754 și este afișat în ordine descrescătoare.

Metoda 2: Utilizarea comenzii PGREP

pGREP navighează procesele curente și enumeră identificatorii de proces care corespund criteriilor de selecție pentru stdout.

# PGREP Apache2 2361 2362 2363 2364 2365 2594 3754

De asemenea, arată ca concluzia de mai sus, dar aceasta conduce la o reducere a rezultatelor în ordine ascendentă, ceea ce sugerează în mod clar că părintele PID este ultimul.

În cazul meu este 3754.

Notă. Dacă aveți mai multe identificatori de proces, puteți întâmpina problema de identificare a identificatorului procesului părinte atunci când utilizați comanda PIDF & PGREP.

Metoda 3: Utilizarea comenzii PSTREDE

pSTRED prezintă procese de funcționare ca un copac.

Arborele este înrădăcinat fie în PID, fie în init dacă PID-ul este omis.

Dacă numele de utilizator este specificat în comanda PSTRED, atunci este afișat întregul proces care aparține utilizatorului corespunzător.

pSTREDE combină vizual ramurile identice, plasându-le în paranteze pătrate și prefix cu numărul de repetări.

# PSTREE -P | GREP "Apache2" - - - apache2 (3754)- + - Apaci2 (2361) | | -Apac2 (2362) | | -Aapac2 (2363) | | -Apac2 (2364) | | -Apac2 (2365) | `-Apache2 (2594)

Pentru a obține un singur proces părinte, utilizați următorul format.

# PSTREE -P | GREP "Apache2" | Head -1 | - apache2 (3754)- + - Apaci2 (2361)

Echipa PSTRED este foarte simplă, deoarece separă separat procesele părinte și copil.

Metoda 4: Utilizarea comenzii PS

pS afișează informații despre alegerea proceselor active.

Afișează ID-ul procesului (PID \u003d PID), un terminal asociat procesului (TNAME \u003d TTY), timpul procesorului cumulativ în HH: mm: SS (Time \u003d Time) și numele executabilului (UCMD \u003d CMD).

În mod implicit, fișierul de ieșire nu este sortat.

# PS Aux | GREP "Apache2" www-date 2361 0.0 0.4 302652 9732? S 06:25 0:00 / usr / sbin / apache2 -k start www-date 2362 0.0 0.4 302652 9732? S 06:25 0:00 / usr / sbin / apache2 -k start www-date 2363 0.0 0.4 302652 9732? S 06:25 0:00 / usr / sbin / apache2 -k start www-date 2364 0.0 0.4 302652 9732? S 06:25 0:00 / usr / sbin / apache2 -k start www-date 2365 0.0 0.4 302652 8400? S 06:25 0:00 / usr / sbin / apache2 -k start www-date 2594 0.0 0.4 302652 8400? S 06:55 0:00 / usr / sbin / apache2 -k start rădăcină 3754 0.0 1.4 302580 29324? SS Dec 11:23 / USR / SBIN / Apache2 -k Start Rădăcină 5648 0.0 0.0 12784 940 PTS / 0 S + 21:32 0:00 GREP Apache2

Din concluzia de mai sus, putem identifica cu ușurință identificatorul procesului părinte (PPID) pe baza datei de începere a procesului.

În cazul meu, procesul Apache2 a fost lansat @ Dec 11, ceea ce este părinte, și alții - filiale. Pid Apache2 este 3754.

Metoda 5: Utilizarea echipei SS

sS este folosit pentru a scoate statisticile socket.

Vă permite să afișați informații similare cu Netstat.

Se poate afișa mai multe informatii Despre TCP și statutul decât alte instrumente.

Poate afișa statistici pentru toate tipurile de prize, cum ar fi pachetul, TCP, UDP, DCCP, RAW, Domeniul Unix etc.

# SS -TNLP | Grep apache2 asculta 0 128 :: * Utilizatori: (("apache2", pid \u003d 3319, fd \u003d 4), ("Apache2", PID \u003d 3318, FD \u003d 4), ("Apache2", pID \u003d 3317., fd \u003d 4))

Metoda 6: Utilizarea echipei Netstat

netstat - ieșire conexiuni de retea, Mese de rutare, statistici de interfață, masquerading și compuși multicast.

Implicit, NetStat afișează o listă de prize deschise.

Dacă nu specificați familiile familiei, vor fi afișate prize active ale tuturor familiilor de adrese configurate.

Acest program este depășit. Înlocuirea pentru Netstat - SS.

# Netstat -TNLP | GREP APACO2 TCP6 0 0 ::::80 ::: * Asculta 3317 / Apache2.

Metoda-7: Utilizarea comenzii LSOF

lSOF este o listă de fișiere deschise.

Comanda LSOF Linux afișează informații despre fișierele deschise pentru procesele care rulează în sistem.

# LSOF -I -P | Grep apache2. apache2 3317. Rădăcină 4U IPv6 40518 0T0 TCP *: 80 (Ascultați) Apache2 3318 WWW-DATA 4U IPv6 40518 0T0 TCP *: 80 (Ascultați) Apache2 3319 WWW-DATA 4U IPv6 40518 0T0 TCP *: 80 (Ascultați)

Metoda 8: Utilizarea echipei de fuziune

Utilitatea FUSER trebuie să înregistreze procesele care rulează pe sistemul local care deschid unul sau mai multe fișiere numite la ieșirea standard.

# Fuser-V 80 / TCP Comanda de acces PID 80 / TCP: ROOT 3317 F .... Apache2 Www-date 3318 f .... Apache2 www-date 3319 F .... Apache2

Metoda 9: Utilizarea comenzii SystemCTL

systemCTL - Sistem de management System și Manager de service.

Se înlocuiește vechiul control al sistemului SYSV și cel mai modern sisteme de operare Linux au fost adaptate de sistem.

# Sisteme SystemCTL Apache2 ● Apache2.service - Serverul HTTP Apache încărcat: Încărcat (/lib/systemd/system/apache2.service, dezactivat; Vendor presetat: Activat) Drop-in: /lib/systemd/system/apache2.service. D └─APACHE2-SYSTEMD.CONF Active: Activ (Running) de la Tue 2018-09-25 10:03:28 ist; Acum Process: 3294 Execstart \u003d / usr / sbin / apachectl Start (cod \u003d ieșire, stare \u003d 0 / succes) PID principal: 3317 (Apache2) Sarcini: 55 (limită: 4915) Memorie: 7.9m CPU: 71ms CGrup: /system.slice/apache2.service ├─317 \u200b\u200b/ usr / sbin / apache2 -k start ├─318 / usr / sbin / apache2 -k start └ ─3319 / usr / sbin / apache2 -k Start Sep 25 10:03:28 Ubuntu Systemd: Pornirea serverului HTTP Apache ... Sep 25 10:03:28 Ubuntu Systemd: A început serverul Apache HTTP.


În acest articol vom încerca să creăm un modul de kernel care poate schimba deja PID-ul procesul de funcționare În Linux, precum și experimentul cu procesele care au primit un PID modificat.


Un avertisment: Schimbarea PID este un proces non-standard, iar în anumite circumstanțe poate duce la o panică nucleus.

Modulul nostru de testare va implementa caracterul / dev / testul, când citirea de la care este schimbat procesul. Pentru un exemplu de implementare a dispozitivului simbolic, datorită acestui articol. Codul complet al modulului este dat la sfârșitul articolului. Desigur, soluția cea mai corectă a fost aceea de a adăuga un apel de sistem la kernel-ul însuși, dar acest lucru va necesita recompilarea miezului.

Mediu inconjurator

Toate acțiunile de testare a modulului au fost efectuate în mașină virtuală Virtualbox cu distribuție de 64 de biți și versiunea kernel 4.14.4-1. Comunicarea cu mașina a fost efectuată utilizând SSH.

Încercați o decizie simplă

Câteva cuvinte despre curent: Variabila actuală indică structura Task_sTRT cu descrierea procesului în kernel (PID, UID, GID, cmdline, spații de nume etc.)

Prima idee a fost aceea de a schimba pur și simplu parametrul curent-\u003e PID din modulul kernel la cel dorit.

Static ssize_t dispozitive_read (struct * Filp, char * tampon, dimensiune_t lungime, lop_t * offset) (imprimk ("PID:% d. \\ N", curent-\u003e pid \u003d 1; imprimk ("nou PID :% d. \\ n ", actual-\u003e PID);,)
Pentru a testa performanța modulului, am scris un program pe C ++:

#Include. #Include. #Include. Int principal () (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 >\u003e Str. STD :: Cout<< "My new PID " << getpid() << std::endl; execl("/bin/bash","/bin/bash",NULL); }
Încărcați modulul de comandă INSMOD, creați / dev / test și încercați.

# ./a.out Părintele mele PID 293 PID meu 782 Noul meu PID 782
PID nu sa schimbat. Poate că acesta nu este singurul loc în care este indicat PID.

Încercați # 2 câmpuri suplimentare PID

Dacă nu curent-\u003e PID este identificatorul procesului, ce este? Vizualizare rapidă a codului GetPid () adus la structura Task_sTRT, care descrie procesul Linux și fișierul PID.c din codul sursă al kernelului. Funcția dorită este __task_pid_nr_ns. În codul funcției, sarcina-\u003e PIDs.pid apeluri, acest parametru pe care îl schimbăm

Completați, încercați

De când am testat pe SSH, am reușit să obțin ieșirea programului la căderea kernelului:

Părintele mele PID 293 My PID 1689 Noua mea PID 1689
Primul rezultat este deja ceva. Dar PID nu sa schimbat oricum.

Încercarea # 3 nu sunt exportate simboluri de kernel

Studiul mai atent al PID.C a dat o funcție care face ceea ce avem nevoie
Static vid __change_pid (struct Task_struct * sarcină, enum pid_type tip,
Struct pid * nou)
Funcția ia sarcina pentru care doriți să schimbați PID, tip PID și, de fapt, un nou PID. Crearea noului PID este o funcție
Struct pid * aloc_pid (struct pid_namespace * ns)

Această caracteristică are doar un spațiu de nume în care va fi localizat un nou PID, acest spațiu poate fi obținut folosind Task_Active_pid_ns.
Dar există o problemă: aceste simboluri de kernel nu sunt exportate în kernel și nu pot fi utilizate în module. În rezolvarea acestei probleme, m-am ajutat minunat. Codul funcției Find_SYM este preluat de acolo.

Static ASMLINKGE VOID (* schimbare_pidr) (struct Task_struct * Sarcina, Enum Pid_Type Tip, Struct PID * PID); Static asmlinkage struct PID * (* aloc_pidr) (struct Pid_nameSpace * NS); Static int __init test_init (vid) (kern_alert "driver de testare încărcate! \\ N"); schimbare_pidr \u003d gind_sym ("schimbare_pid"); aloc_pidr \u003d gind_sym ("aloc_pid"); ...) static ssize_t dispozitiv_read (struct fișier * Filp, Char * Tampon, Dimensiune_T Lungime, LOFF_T * Offset) (Printk ("PID:% D. \\ n", Current-\u003e PID); Structura PID * Newpid; Newpid \u003d aloc_pidr (Task_Active_Pid_ns (curent)); Schimbare_pidr (curent) , Pidtype_PID, Newpid); Printk ("nou PID:% D. \\ n", curent-\u003e PID); ...)
Ne respectăm, rulați

Părintele mele PID 299 My PID 750 nou PID 751
PID sa schimbat! Kernel-ul a alocat automat programul nostru gratuit PID. Dar este posibil să folosiți PID, care a luat un alt proces, de exemplu PID 1? Adăugați codul după alocare

Newpid-\u003e numere.nr \u003d 1;
Ne respectăm, rulați

Părintele mele PID 314 PID-ul meu 1172 nouul meu PID 1
Avem un adevărat PID 1!

Bash a emis o eroare datorită căreia sarcinile de comutare a comenzilor nu vor funcționa, dar toate celelalte funcții funcționează perfect.

Caracteristici interesante ale proceselor cu PID modificat

PID 0: Conectați-vă că nu puteți ieși

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

Newpid-\u003e numere.nr \u003d 0;
Ne respectăm, rulați

Părintele mele Pid284 My PID 1517 Noua mea PID 0
Se pare că Pid 0 nu este așa și special? Ne bucurăm, scriem ieșire și ...

Kernel-ul cade! Kernel-ul a determinat sarcina noastră ca sarcină inactiv și, văzând finalizarea, pur și simplu a căzut. Aparent, înainte de finalizare, programul nostru trebuie să returneze PID-ul "normal".

Procesul invizibil

Să ne întoarcem la cod și să expunem PID, garantat că nu este ocupat
Numere NewPid-\u003e Numere.nr \u003d 12345;

Ne respectăm, rulați

Părintele mele Pid296 PID-ul meu 735 nou PID 12345
Să vedem ce este în / proc

1 148 19 224 288 37 79 86 224 288 37 79 86 93 Console FB KCORE Locks Partitie Swaps Versiunea 10 149 2 226 29 4 8 87 ACPI CPUINFO Filessystems SystemsysysySystems MEMINFO SCHED_DEBUG SYS VMALLOCINFO 102 15 20 23 290 5 80 88 ASUNE CRYPTO FS Keys ScheltStat SYSRQ- Trigger VMSAT 11 16 208 24 291 6 81 89 Dispozitivele BuddyInfo Întrerupeți modulele KMSG SCSI SYSVIPC Zoneinfo 12 17 21 25 296 7 82 9 Discuta de autobuze Iomem Kpagecgroup Montare Auto-Self 13 176 210 26 3 737 83 90 CGROUPS DMA IOPORTS KPAGECOUNT MTRR SLASINFO TIMER_List 139 18 22 27 30 76 84 91 CMDLINE DRIVER IRQ KPAGEFLAGS NET SOFTING TTY 14 182 222 28 31 78 85 92 Config.gz Execdomains Kallsyms Loadevg PagypeInfo stat uptime
După cum puteți vedea / proc nu definește procesul nostru, chiar dacă am ocupat gratuit PID. PID-ul anterior nu este, de asemenea, în / proc, și este destul de ciudat. Poate că suntem într-un alt spațiu de nume și, prin urmare, nu suntem vizibili la principalul / proc. Eu muncesc noul / proc, și să vedem ce este acolo

1 14 18 210 25 291 738 81 9 Dispozitive de autobuz FS Blocuri de utilizatori cheie Paginificinfo soidrqs timer_list 10 148 182 22 26 266 741 82 90 CGROUPS DishStates Interrupts Keys Meminfo Partitii Stat Tty 102 149 19 222 27 30 76 83 92 CMDLINE DMA IOMEM KMSG DMA Schimbari de swit-uri 11 15 2 224 28 37 78 84 93 CONFIG.GZ Driver IOPORTS KPAGECGROUP Module Slampstat SYS Versiunea 12 16 20 226 288 4 79 85 ACPI Console Execdomains Irq Kpagecount Mounts SCSI SYSRQ-declanșator VMallocinfo 13 17 208 29 6 8 86 ASUND CPUINFO FB Kallsyms KPAGEFLAGS MTRR Self SysVipc VMSTAT 139 176 21 24 290 7 80 87 Buddyinfo Crypto Systems KCORE Loadavg Net Slabinfo Thread-Self Zoneinfo
Încă nu există procesul nostru, ceea ce înseamnă că suntem în spațiul de nume obișnuit. Verifica

PS -E | Grep bash.
296 pts / 0 00:00:00 bash

Numai un bash de la care am lansat programul. Nici PID anterior, nici curentul de pe listă.

M S vă arată cum să ucizi procesul în Linux. Unul dintre principalele avantaje ale Linux este abilitatea de a finaliza procesul fără a fi nevoie să reporniți serverul. În acest articol vă vom arăta cum să ucizi procesul din Linux folosind comanda Kill, Pkill și Killarl.

1. Ce este PID

Înainte de a începe, trebuie să știm ce este ID-ul procesului (PID).

PID este o identificare digitală a procesului în. Fiecare proces are un PID unic. De exemplu, de exemplu, primul proces care începe în sistemul bazat pe Linux este procesul, iar PID este instalat în 1. Acest proces este părintele tuturor celorlalte procese. Procesul de inițializare nu poate fi ucis folosind comenzile de ucidere și asigură că nu va fi ucis accidental.

Acum, pentru a găsi PID-ul fiecărui proces de funcționare pe server, putem executa următoarea comandă:

Acest lucru ne oferă o listă a tuturor proceselor de funcționare și a PID corespunzătoare.

Dacă vrem să găsim un PID dintr-un proces specific, putem folosi comanda PIDOF cu numele procesului ulterior. De exemplu, pentru a afla PID-ul procesului nostru MySQL, puteți executa următoarea comandă:

PIDOF MYSQL.

Pentru informații mai detaliate, putem folosi comanda pS Aux.impreuna cu grep.:

PS Aux | GREP MySQL.

Acum, când știm ce este PID și cum să găsim un PID de un proces specific, putem merge la următoarea secțiune și să învățăm cum să o omorâm.

2. Ucideți procesul folosind comanda de ucidere din Linux

Există mai multe reguli importante pe care trebuie să le cunoaștem înainte de a începe să utilizați comanda de ucidere.

  • Puteți ucide doar propriile noastre procese care aparțin identificatorului dvs. de utilizator
  • Nu puteți ucide alte procese de utilizatori.
  • Nu puteți ucide procesele de sistem (dacă nu sunteți superuser)
  • Utilizatorul de rădăcină poate ucide procesul oricărui alt utilizator și orice proces de sistem

Când ucidem procesul cu echipa de ucidere, trimitem de fapt un semnal de reglementare PID pe care vrem să-l ucidem. Următoarele semnale sunt folosite de comanda de ucidere:

1 \u003d Hung Up 9 \u003d Kill 15 \u003d Terminați

Semnalul Hung Up este rar folosit. Cel mai adesea folosim semnalul de ucidere și dacă nu funcționează, putem folosi semnalul de terminare.

Prin urmare, de îndată ce găsim procesul PID pe care vrem să-l ucidem, să folosim una dintre metodele descrise de noi mai devreme, putem folosi comanda kill -9 Pid.Pentru a ucide procesul din acest PID particular.

De exemplu, dacă PID-ul este egal cu 6738, putem folosi următoarea comandă:

Kill -9 6738.

3. Ucideți procesul folosind comanda PKILL în Linux

Dacă doriți să utilizați numele procesului în loc de PID pentru ao ucide, puteți utiliza comanda PKILL. De exemplu, dacă procesul pe care vrem să îl ucidem este numit, putem folosi următoarea comandă pentru al ucide:

Pkill Mysql.

4. Omoara procesul folosind comanda Killarl din Linux

Cele două comenzi anterioare sunt folosite pentru a ucide doar un singur proces specific. Dar dacă vrem să ucidem procesul împreună cu toate procesele sale de copil, putem folosi echipa omoara-i pe toti.:

Killall Mysql.

În acest exemplu, vom ucide procesul MySQL și toate filialele sale.

Ele sunt cele mai frecvente exemple ale uciderii procesului din Linux.

Indiferent de ce a fost, dar unele aplicații în Linux. Uneori atârnă. În același timp, există situații în care aplicația nu răspunde deloc sau funcționează atât de încet încât nu este posibilă completarea corectă a activității sale. Pentru a ieși rapid la situația rezultată, puteți "ucide" acest proces. Pentru comenzile de utilizare a etogazului ucide și omoara-i pe toti.. Acum vom înțelege cum să folosim aceste comenzi, să găsim procesul PID și să trimiteți semnalul Sigkill.

Pentru a evita configurațiile, suntem de acord în cadrul procesului de a înțelege programul care rulează în sistem. De exemplu, dacă aveți mai multe ferestre ale browserului Mozilla Firefox - aceasta înseamnă că sunt lansate trei procese.

Definiți procesul PID - comanda PIDOF

PID - un identificator unic de proces în sistem Linux.. Pentru a opri corect procesul, trebuie mai întâi să definiți PID-ul său. Aceasta utilizează comenzi PS și GREP. In schimb pS comanda Se intenționează să afișeze o listă de procese active în sistem și informații despre ele. Echipa GREP. Începe simultan cu PS (în canal) și va urma rezultatele comenzii PS. Puteți afișa o listă cu toate procesele care rulează pe linia de comandă:

Desigur, PID-ul poate fi determinat prin top.. Dar, în majoritatea cazurilor, numărul de procese este prea mare (și schimbarea dinamică în partea de sus), deci nu este atât de ușor să determinați PID-ul rapid și corect. Doar pentru asta, comanda GREP este folosită. De exemplu, pentru a finaliza procesul de browser Google Chrome, trebuie să executați următoarea comandă:

pS Axu | Grep crom.

$ PS Axu | Grep crom.
ITECHF2 20474 2.7 1.5 938416 120136 TTY2 SL + 11:07 0:00 / Opt / Google / Chrome / Chrome

În cazul nostru, 20474 și există un PID dorit. Mai ușor - utilizați comanda pidof., Este necesar să specificați numele procesului. De exemplu:

$ pidof crom.
20728 20706 20668 20647 20586 20574 20553 20508 20474

Finalizați procesul în comenzile Linux - Kill și Killarl

Finalizați procesul în sistemul de operare Linux., cunoscând-o pe PID, poate fi o echipă ucide. Merită cunoașterea și înțelegerea: Comanda Kill este concepută pentru a trimite un semnal procesului. În mod implicit, dacă nu specificăm ce semnal să trimiteți, semnalul Sigterm este trimis (de la terminarea cuvântului - finalizare). Sigterm indică procesul de terminat. Fiecare semnal are propriul număr. Sigterm are un număr 15. O listă a tuturor semnalelor (și numerele lor) că comanda de ucidere poate fi eliminată prin efectuarea ucide -l. . Pentru a trimite un semnal Sigkill (are un număr de numărul 9) 2811, rulați pe comanda șirului:

În același timp, semnalul Sigterm nu poate opri procesul (de exemplu, atunci când interceptați sau blocați un semnal), Sigkill efectuează întotdeauna distrugerea procesului, deoarece nu poate fi interceptată sau ignorată.

Echipa Killarl. Linux este conceput pentru a "ucide" toate procesele care au același nume. Este convenabil, deoarece nu trebuie să cunoaștem procesul PID. De exemplu, vrem să închidem toate procesele numite crom. Efectuați în terminal:

Comanda Killall, precum și uciderea, semnalul implicit Sigterm. Pentru a trimite un alt semnal, trebuie să utilizați opțiunea -S. . De exemplu:

Ce credeți că sistemul de operare Linux poate avea în mod automat grijă de el însuși? Când totul funcționează bine sau nu aveți nevoie de caracteristici non-standard - destul de da. Dar, uneori, puteți avea nevoie de intervenția ta în lucrarea ei.

În Linux pentru fiecare program individual, procesul creează când începe. Indiferent de modul în care rulați programul, tu în mod independent manual sau de sistemul sau kernelul. De exemplu, programul de inițializare care rulează imediat după finalizarea descărcării, are și propriul proces cu un identificator 0. Procesele din Linux pot fi descrise ca containere în care toate informațiile de stare sunt stocate și execută programul. Dacă programul funcționează bine, atunci totul este bine, dar dacă agățat sau trebuie să îl configurați, este posibil să fie necesar să gestionați procesele din Linux.

Acest articol va afecta subiectul extins, vom lua în considerare astfel de oportunități:

  • Vizualizați procesele de funcționare
  • Vizualizați informații despre procese
  • Căutați procese în Linux
  • Finalizarea proceselor
  • Procesul accesibil limită de memorie

Nu am putut include primele elemente din articol, dar ele sunt foarte simple și nu le vom dezasambla în foarte detaliate. Dar orice altceva poate părea complex și nu este suficient de descris.

Să începem cu ceea ce înțelegem în termeni. De fapt, procesul este fiecare program. Așa cum am spus, este creat un proces separat pentru fiecare program de funcționare a programului. Ca parte a programului, programul este alocat timp de procesor, RAM și alte resurse de sistem. Fiecare proces are un identificator propriu, ID-ul Proccess sau pur și simplu PID, pe ele, cel mai adesea definește procesele Linux. PID este definit în nici o coincidență, așa cum am spus, programul de inițializare primește PID 1, iar fiecare program de rulare continuă este mai mult. Astfel, programele de utilizator PID ajunge la câteva mii.

De fapt, procesele Linux nu sunt la fel de abstracte cum vă par a fi acum. Ei pot încerca bine să se simtă. Deschideți managerul de fișiere, accesați directorul rădăcină, apoi deschideți dosarul / procsul. Vedeți aici o grămadă de numere? Deci, acesta este all - PID de toate procesele de funcționare. Fiecare dintre aceste foldere este toate informațiile despre proces.

De exemplu, să vedem folderul de proces 1. Există și alte directoare în dosar și multe fișiere. Fișierul CMDline conține informații despre comanda de pornire a procesului:

cAT / PROC / 1 / CMDLINE

Usr / lib / sistemd / sistemd

Deoarece folosesc sistemul de inițializare sistem, primul proces începe pentru aceasta. Utilizarea catalogului / proc puteți face totul. Dar este foarte inconfortabil, având în vedere numărul proceselor de funcționare din sistem. Prin urmare, există utilități speciale pentru a pune în aplicare sarcinile necesare. Să ne întoarcem la luarea în considerare a utilităților care vă permit să implementați gestionarea proceselor din Linux.

Managementul procesului în Linux

Linux are o cantitate foarte mare de utilități pentru a rezolva diverse sarcini de gestionare a proceselor. Acestea sunt, de asemenea, soluții multifuncționale, cum ar fi HTOP, top, precum și utilități simple, de exemplu, PS, Kill, Killarl, care și T. Nu voi considera utilități grafice în acest articol și nu voi considera și topul. Primul este pentru că prea simplu, al doilea este că HTOP este mai bun. Ne vom concentra la locul de muncă cu programul HTOT și analogii săi sub formă de utilități stil GNU, o singură funcție este o funcție.

Să instalăm HTOP dacă nu a fost încă instalat. În Ubuntu, acest lucru se face așa:

sudo apt install htop

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

Vizualizați procesele de funcționare

Aceasta este o sarcină foarte simplă și este, de asemenea, rezolvată pur și simplu. Pentru aceasta, există multe utilități, variind de la PS obișnuit, la un top mai avansat interactiv, HTOP și așa mai departe.

Deschiderea HTOP, vedem imediat o listă de procese de funcționare. Desigur, nu toate procesele Linux sunt afișate aici, există o mulțime de ele în sistem, știți deja, toți nu se vor potrivi pe un ecran. Procesele implicite care rulează în numele utilizatorului dvs.:

Puteți vedea astfel de informații despre acest proces:

  • PID - Identificatorul procesului
  • Utilizator. - utilizatorul din care a fost lansat procesul
  • PRI. - prioritatea procesului Linux la nivelul kernelului (de obicei NI + 20)
  • Ni. - Prioritatea implementării procesului de la -20 la 19
  • S. - Statutul procesului
  • CPU. - Resurse de procesoare utilizate
  • Mem. - Memoria utilizată
  • Timp. - timpul procesului de lucru

Puteți adăuga parametri suplimentari pentru a fi afișați, dar aceste principale. Puteți adăuga parametri utilizând meniul de configurare. Totul este foarte simplu acolo, citiți instrucțiunile și urmați instrucțiunile. De exemplu, a fost adăugat parametrul PPID:

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

Există, de asemenea, o oportunitate interesantă de a plasa procesele sub forma unui copac. Puteți vedea ce proces a fost lansat un anumit proces. Pentru a afișa lemnul, apăsați butonul F5:

Aproape aceleași acțiuni pe care le puteți efectua utilizând programul PS. Numai aici nu există un mod interactiv atât de convenabil. Totul se face folosind opțiuni.

Luați în considerare principalele opțiuni care vor utiliza:

  • -E. - retrage informații despre toate procesele
  • -A. - retrage informații despre toate procesele cele mai frecvent solicitate
  • -T. - Afișați numai procese din acest terminal
  • -P. - Afișați informații numai despre procesul specificat.
  • -U. - Afișați procesele unui singur utilizator specific

Într-un cuvânt pentru a vedea toate procesele active în prezent în Linux, se utilizează combinația de opțiuni AUX:

Programul arată toți aceiași parametri, numai aici nu există o interfață interactivă. Crezi că este imposibil să sortezi procesele, dar esti confundat, poti. Pentru aceasta, există o opțiune de sortare. Puteți să le sortați în orice domeniu, de exemplu:

pS Aux --sort \u003d% MEM

Lista va fi sortată în ordine inversă, valoarea inferioară, în partea de sus - mai puțin. Dacă aveți nevoie de ordine inversă, adăugați minus:

pS Aux --sort \u003d -% CPU

Ca câmp pentru sortare, procesele Linux sau oricare alți parametri pot fi utilizați. De asemenea, puteți tăia ieșirea dacă nu aveți nevoie să afișați toate informațiile:

Se pare că PS nu are capacitatea de a costa procese de copaci. Dar nu chiar, există o echipă separată pentru acest lucru:

Căutați procese în Linux

Lista proceselor, este bine. Dar, uneori, când un proces este atârnat și trebuie să ucizi procesul Linux sau trebuie să petrecem orice acțiune cu el, trebuie să evidențieți acest proces din listă, să aflați PID și informații despre aceasta.

Pentru a găsi procesul Linux în HTOX, puteți utiliza butonul F3. Apăsați F3 și tastați cuvântul. Mai mult, faceți clic pe F2 sau ESC pentru a merge la următoarea intrare pentru a finaliza căutarea:

Filtrul HTOP poate fi, de asemenea, utilizat pentru a căuta procese în Htot. Apăsați F4, introduceți cuvântul și numai procesele Linux vor fi afișate, numele care include acest cuvânt.

Nu există nici o filtrare în utilitatea PS, dar putem folosi utilitarul GREP, izolați ieșire PS pentru a găsi procesul Linux:

pS Aux | GREP CHROMIUM.

Aceasta este o echipă foarte frecvent utilizată.

Schimbarea priorității proceselor

Prioritatea procesului Linux înseamnă cât de mult va fi acordat timpul procesor acestui proces în comparație cu alții. Deci, putem configura foarte ușor ce program va funcționa mai repede și care mai lent. Valoarea prioritară poate varia de la 19 (prioritate minimă) la -20 - prioritatea maximă a procesului Linux. În plus, este posibil să se reducă prioritatea cu drepturile unui utilizator obișnuit, dar să o sporească pentru a spori drepturile superuserului.

Parametrul frumos este utilizat pentru a controla prioritatea. Permiteți-mi să vă reamintesc că este vorba de acest amendament, este în majoritatea cazurilor mai mult pentru Nisa la 20. Pentru a schimba prioritatea procesului, setați pur și simplu cursorul pe acesta și apăsați F7 pentru a reduce numărul (creșterea priorității) sau F8 pentru a mări numărul .

Dar pentru a rezolva această sarcină de gestionare a proceselor Linux, nu este necesar să utilizați HTOP. Puteți face totul cu alte echipe. De exemplu, comanda frumoasă. Folosind-o, puteți specifica prioritatea pentru lansarea procesului:

frumos -n 10 apt-obtine upgrade

Sau să schimbe prioritatea pentru existența deja pe PID:

rENICE -N 10 -P 1343

Finalizarea proceselor din Linux

Dacă procesul este atârnat și nu răspunde, acesta trebuie completat. În HTOP pentru a ucide procesul Linux, fixați pur și simplu cursorul la proces și apăsați F9:

Sistemul de management al procesului utilizează anumite semnale, există semnale care indică procesul de finalizare. Iată câteva semnale majore:

  • Sigkill. - Cereți procesului de salvare a datelor și de sfârșit
  • Sigterm. - Completați imediat procesul, fără a salva

În general, există câteva zeci de semnale, dar nu le vom considera. Trimiteți semnalul Sigkill:

De asemenea, puteți utiliza utilitarul Kill:

De asemenea, puteți distruge procesul numit:

kollall crom.

Restricționarea proceselor

Managementul proceselor în Linux vă permite să controlați aproape totul. Ați văzut deja ce se poate face, dar puteți chiar mai mult. Utilizarea comenzii Ulimit and Configuration File /Etc/security/limits.conf, puteți limita accesul proceselor la resursele de sistem, cum ar fi memoria, fișierele și procesorul. De exemplu, puteți limita memoria procesului Linux, numărul de fișiere și t d d.

Intrarea în fișier are forma următoare:

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

  • domeniu - numele de utilizator, grup sau uid
  • un fel - Vizualizarea restricțiilor - moale sau greu
  • element - resursa care va fi limitată
  • valoare - limita necesară

Restricțiile stricte sunt instalate ca superuser și nu pot fi modificate de utilizatorii normali. Restricțiile moi, moi pot varia de către utilizatori utilizând comanda ulimit.

Luați în considerare principalele limitări care pot fi aplicate proceselor:

  • niciun fisier.
  • la fel de - Numărul maxim de memorie RAM
  • grămadă - dimensiunea maximă a stivei
  • cPU. - timpul maxim al procesorului
  • nproc. - Numărul maxim de nuclee de procesor
  • Încuietori. - Numărul de fișiere blocate
  • gROZAV. - Prioritatea maximă a procesului

De exemplu, limităm timpul procesorului pentru procesele utilizatorilor Sergiy:

sergiy Hard Nproc 20

Puteți vedea restricțiile pentru un anumit proces în dosarul PRO:

cAT / PROC / PID / limite

Timpul maxim al CPU nelimitat de câteva secunde nelimitate
Max Dimensiunea fișierului Unlimited octeți nelimitați
Dimensiunea maximă a datelor nelimitate octeți nelimitați
Max Stack Dimensiune 204800 octeți nelimitați
Dimensiunea maximă a fișierului de bază 0 octeți nelimitați
Max rezident set octeți nelimitat nelimitat
Procese max 23562 23562 Procese
Max Deschideți fișierele 1024 4096 fișiere
Max memoria blocată 18446744073708503040 18446744073708503040 bytes
Max Address spațiu Unlimited octeți nelimitat
Fișierul max blochează blocări nelimitate nelimitate
Max semnale în așteptare 23562 23562 Semnale
Max msgqueue dimensiune 819200 819200 octeți
Max prioritate frumos 0 0
MAX Realtime Prioritate 0 0
Max Timeout Timeout nelimitat Nelimitat SUA

Restricțiile modificate vor intra în vigoare după repornirea. Dar putem și stabili restricții pentru interpretul actual de comandă și procesele create de acesta utilizând comanda ulimit.

Iată opțiunile de comandă:

  • -S. - limită moale
  • -H. - Limită hard
  • -A. - retrage toate informațiile
  • -F. - dimensiunea maximă a fișierelor create
  • -N. - Numărul maxim de fișiere deschise
  • -S. - dimensiunea maximă a stivei
  • -T. - Numărul maxim de timp procesor
  • -U. - Numărul maxim de procese de funcționare
  • -V. - memorie virtuală maximă

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

Acum fi atent:

Instalați limita RAM:

uLIMIT -SV 500000.

Vă reamintesc că această limitare va fi relevantă pentru toate programele efectuate în acest terminal.

Concluzii

Asta e tot. Acum, managementul procesului din Linux nu vă va face probleme. Ne-am uitat foarte detaliat pe acest subiect. Dacă aveți întrebări sau există sugestii pentru adăugarea unui articol, scrieți comentariile!



Ți-a plăcut articolul? Împărtășește-l