Tot el que necessiteu saber sobre els processos a Linux [Guia completa]


En aquest article, passarem per una comprensió bàsica dels processos i veurem breument com gestionar processos a Linux mitjançant determinades ordres.

Un procés fa referència a un programa en execució; és una instància en execució d'un programa. Està format per la instrucció del programa, les dades llegides dels fitxers, altres programes o les entrades d'un usuari del sistema.

Hi ha fonamentalment dos tipus de processos a Linux:

  • Processos en primer pla (també coneguts com a processos interactius): s'inicien i es controlen mitjançant una sessió de terminal. En altres paraules, ha d'haver un usuari connectat al sistema per iniciar aquests processos; no s'han iniciat automàticament com a part de les funcions/serveis del sistema.
  • Processos en segon pla (també anomenats processos automàtics/no interactius): són processos que no estan connectats a un terminal; no esperen cap entrada de l'usuari.

Aquests són tipus especials de processos en segon pla que s'inicien a l'inici del sistema i es continuen executant per sempre com a servei; no moren. S'inicien com a tasques del sistema (executen com a serveis), de manera espontània. Tanmateix, poden ser controlats per un usuari mitjançant el procés d'inici.

Creació d'un processos en Linux

Normalment es crea un procés nou quan un procés existent fa una còpia exacta de si mateix a la memòria. El procés fill tindrà el mateix entorn que el seu pare, però només el número d'ID del procés és diferent.

Hi ha dues maneres convencionals que s'utilitzen per crear un procés nou a Linux:

  • Ús de la funció System() : aquest mètode és relativament senzill, però, és ineficient i té riscos de seguretat considerablement determinats.
  • Utilitzar la funció fork() i exec(): aquesta tècnica és una mica avançada però ofereix una major flexibilitat, velocitat i seguretat.

Com identifica Linux els processos?

Com que Linux és un sistema multiusuari, el que significa que diferents usuaris poden executar diversos programes al sistema, cada instància en execució d'un programa ha de ser identificada de manera única pel nucli.

I un programa s'identifica pel seu ID de procés (PID) així com per l'ID de procés principal (PPID), per tant, els processos es poden classificar en:

  • Processos pare: són processos que creen altres processos durant el temps d'execució.
  • Processos secundaris: aquests processos els creen altres processos durant el temps d'execució.

El procés d'inici és la mare (pare) de tots els processos del sistema, és el primer programa que s'executa quan s'engega el sistema Linux; gestiona tots els altres processos del sistema. L'inicia el propi nucli, de manera que en principi no té un procés pare.

El procés d'inici sempre té l'ID de procés d'1. Funciona com a pare adoptiu per a tots els processos orfes.

Podeu utilitzar l'ordre pidof per trobar l'ID d'un procés:

# pidof systemd
# pidof top
# pidof httpd

Per trobar l'ID de procés i l'ID de procés pare de l'intèrpret d'ordres actual, executeu:

$ echo $$
$ echo $PPID

Un cop executeu una ordre o programa (per exemple, cloudcmd - CloudCommander), iniciarà un procés al sistema. Podeu iniciar un procés en primer pla (interactiu) de la següent manera, es connectarà al terminal i un usuari pot enviar-lo:

# cloudcmd

Per iniciar un procés en segon pla (no interactiu), utilitzeu el símbol &, aquí el procés no llegeix l'entrada d'un usuari fins que es mou al primer pla.

# cloudcmd &
# jobs

També podeu enviar un procés en segon pla suspendint-lo mitjançant [Ctrl + Z], això enviarà el senyal SIGSTOP al procés, aturant així les seves operacions; es torna inactiu:

# tar -cf backup.tar /backups/*  #press Ctrl+Z
# jobs

Per continuar executant l'ordre suspesa anteriorment en segon pla, utilitzeu l'ordre bg:

# bg

Per enviar un procés en segon pla al primer pla, utilitzeu l'ordre fg juntament amb l'ID del treball de la següent manera:

# jobs
# fg %1

També us pot agradar: Com iniciar l'ordre de Linux en segon pla i desconnectar el procés a la terminal

Durant l'execució, un procés canvia d'un estat a un altre en funció del seu entorn/circumstàncies. A Linux, un procés té els estats possibles següents:

  • En execució: aquí s'està executant (és el procés actual del sistema) o està a punt per executar-se (està esperant a ser assignat a una de les CPU).
  • En espera: en aquest estat, un procés està esperant que es produeixi un esdeveniment o un recurs del sistema. A més, el nucli també diferencia dos tipus de processos d'espera; els processos d'espera interrompibles (es poden interrompre per senyals i processos d'espera ininterromputs) estan esperant directament en condicions de maquinari i no es poden interrompre per cap esdeveniment/senyal.
  • Aturat: en aquest estat, s'ha aturat un procés, normalment en rebre un senyal. Per exemple, un procés que s'està depurant.
  • Zombi: aquí, un procés està mort, s'ha aturat però encara té una entrada a la taula de processos.

Hi ha diverses eines Linux per veure/enumerar processos en execució al sistema, les dues tradicionals i conegudes són les ordres principals:

Mostra informació sobre una selecció dels processos actius al sistema, tal com es mostra a continuació:

# ps 
# ps -e | head 

vista dinàmica en temps real d'un sistema en execució, tal com es mostra a la captura de pantalla següent:

# top 

Llegiu això per obtenir més exemples d'ús principals: 12 exemples d'ordres TOP a Linux

Glances és una eina de supervisió del sistema relativament nova amb funcions avançades:

# glances

Per obtenir una guia d'ús completa, llegiu: Mirades: una eina avançada de monitorització del sistema en temps real per a Linux

Hi ha diverses altres eines útils de supervisió del sistema Linux que podeu utilitzar per enumerar els processos actius, obriu l'enllaç següent per llegir-ne més:

  1. 20 eines de línia d'ordres per supervisar el rendiment de Linux
  2. 13 eines de supervisió Linux més útils

Com controlar processos a Linux

Linux també té algunes ordres per controlar processos com kill, pkill, pgrep i killall, a continuació es mostren alguns exemples bàsics de com utilitzar-los:

$ pgrep -u tecmint top
$ kill 2308
$ pgrep -u tecmint top
$ pgrep -u tecmint glances
$ pkill glances
$ pgrep -u tecmint glances

Per aprendre a utilitzar aquestes ordres en profunditat, per matar/acabar processos actius a Linux, obriu els enllaços següents:

  1. Una guia per a les ordres Kill, Pkill i Killall per finalitzar el procés de Linux
  2. Com trobar i matar processos en execució a Linux

Tingueu en compte que podeu utilitzar-los per eliminar les aplicacions que no responen a Linux quan el vostre sistema es congela.

La forma fonamental de controlar els processos a Linux és enviar-los senyals. Hi ha diversos senyals que podeu enviar a un procés per veure tots els senyals executats:

$ kill -l

Per enviar un senyal a un procés, utilitzeu les ordres kill, pkill o pgrep que hem esmentat anteriorment. Però els programes només poden respondre als senyals si estan programats per reconèixer aquests senyals.

I la majoria de senyals són per a ús intern del sistema, o per als programadors quan escriuen codi. Els següents són senyals que són útils per a un usuari del sistema:

  • SIGHUP 1: enviat a un procés quan el seu terminal de control està tancat.
  • SIGINT 2: enviat a un procés pel seu terminal de control quan un usuari interromp el procés prement [Ctrl+C].
  • SIGQUIT 3: enviat a un procés si l'usuari envia un senyal de sortida [Ctrl+D].
  • SIGKILL 9: aquest senyal acaba (mata) immediatament un procés i el procés no realitzarà cap operació de neteja.
  • SIGTERM 15: aquest és un senyal de finalització del programa (kill l'enviarà per defecte).
  • SIGTSTP 20: enviat a un procés pel seu terminal de control per demanar-li que s'aturi (parada del terminal); iniciada per l'usuari prement [Ctrl+Z].

A continuació es mostren exemples d'ordres de matança per matar l'aplicació Firefox utilitzant el seu PID un cop es bloci:

$ pidof firefox
$ kill 9 2687
OR
$ kill -KILL 2687
OR
$ kill -SIGKILL 2687  

Per matar una aplicació amb el seu nom, utilitzeu pkill o killall d'aquesta manera:

$ pkill firefox
$ killall firefox 

Al sistema Linux, tots els processos actius tenen una prioritat i un cert valor agradable. Els processos amb prioritat més alta normalment tindran més temps de CPU que els processos de prioritat més baixa.

Tanmateix, un usuari del sistema amb privilegis root pot influir en això amb les ordres nice i renice.

Des de la sortida de l'ordre superior, el NI mostra el valor agradable del procés:

$ top  

Utilitzeu l'ordre nice per establir un valor agradable per a un procés. Tingueu en compte que els usuaris normals poden atribuir un valor agradable de zero a 20 als processos que tenen.
Només l'usuari root pot utilitzar valors agradables negatius.

Per reconèixer la prioritat d'un procés, utilitzeu l'ordre renice de la següent manera:

$ renice +8  2687
$ renice +8  2103

Consulteu els nostres articles útils sobre com gestionar i controlar els processos de Linux.

  1. Gestió de processos de Linux: arrencada, tancament i tot el que hi ha entremig
  2. Cerca els 15 processos principals per ús de memòria amb superior en el mode per lots
  3. Cerca els processos que s'executen amb major ús de memòria i CPU a Linux
  4. Com trobar un nom de procés mitjançant el número PID a Linux

Això és tot per ara! Tens alguna pregunta o idees addicionals, comparteix-les amb nosaltres mitjançant el formulari de comentaris a continuació.