Introduzione
Un server Linux, come qualsiasi altro computer con cui potresti avere familiarità, esegue applicazioni. Per il computer, questi sono considerati “processi”.
Mentre Linux gestirà la gestione di basso livello dietro le quinte nel ciclo di vita di un processo, avrai bisogno di un modo di interagire con il sistema operativo per gestirlo da un livello superiore.
In questa guida, discuteremo alcuni semplici aspetti della gestione dei processi. Linux fornisce un’abbondante collezione di strumenti per questo scopo.,
Esploreremo queste idee su un Ubuntu 12.04 VPS, ma qualsiasi distribuzione Linux moderna funzionerà in modo simile.
Come Visualizzare i Processi in Esecuzione in Linux
top
Il modo più semplice per scoprire quali processi sono in esecuzione sul vostro server per eseguire il top
comando:
top
La parte superiore fetta di dare informazioni statistiche di sistema, come il sistema di carico e il numero totale di attività.
Puoi facilmente vedere che c’è 1 processo in esecuzione e 55 processi stanno dormendo (aka idle/non usando le risorse della CPU).,
La parte inferiore contiene i processi in esecuzione e le relative statistiche di utilizzo.
htop
Una versione migliorata ditop
, chiamatahtop
, è disponibile nei repository. Installalo con questo comando:
sudo apt-get install htop
Se eseguiamo il comandohtop
, vedremo che c’è un display più user-friendly:
htop
Puoi saperne di più su come usare top e htop qui.,
Come usare ps per elencare i processi
Entrambitop
ehtop
forniscono una bella interfaccia per visualizzare i processi in esecuzione simile a un task manager grafico.
Tuttavia, questi strumenti non sono sempre abbastanza flessibili da coprire adeguatamente tutti gli scenari. Un potente comando chiamato ps
è spesso la risposta a questi problemi.,
Quando viene chiamato senza argomenti, l’output può essere un po ‘ lack-luster:
ps
PID TTY TIME CMD 1017 pts/0 00:00:00 bash 1262 pts/0 00:00:00 ps
Questo output mostra tutti i processi associati alla sessione utente e terminale corrente. Questo ha senso perché stiamo solo eseguendobash
eps
con questo terminale attualmente.,
Per avere un’immagine più completa dei processi su questo sistema, possiamo eseguire quanto segue:
ps aux
Queste opzioni indicano a ps
di mostrare i processi di proprietà di tutti gli utenti (indipendentemente dalla loro associazione terminale) in un formato user-friendly.
Per vedere una vista ad albero, dove sono illustrate le relazioni gerarchiche, possiamo eseguire il comando con queste opzioni:
ps axjf
Come puoi vedere, il processo kthreadd
è mostrato essere un genitore del processo ksoftirqd/0
e gli altri.,
Una nota sugli ID di processo
Nei sistemi Linux e Unix-like, ad ogni processo viene assegnato un ID di processo o PID. Questo è il modo in cui il sistema operativo identifica e tiene traccia dei processi.
Un modo rapido per ottenere il PID di un processo è con il comando pgrep
:
pgrep bash
1017
Questo semplicemente interrogherà l’ID del processo e lo restituirà.
Il primo processo generato all’avvio, chiamato init, riceve il PID di “1”.,
pgrep init
1
Questo processo è quindi responsabile della generazione di ogni altro processo sul sistema. I processi successivi ricevono numeri PID più grandi.
Il genitore di un processo è il processo che è stato responsabile della generazione di esso. I processi padre hanno un PPID, che puoi vedere nelle intestazioni delle colonne in molte applicazioni di gestione dei processi, tra cuitop
,htop
eps
.,
Qualsiasi comunicazione tra l’utente e il sistema operativo sui processi comporta la traduzione tra i nomi dei processi e i PID ad un certo punto durante l’operazione. Questo è il motivo per cui le utilità ti dicono il PID.
Relazioni padre-figlio
La creazione di un processo figlio avviene in due passaggi: fork(), che crea un nuovo spazio di indirizzi e copia le risorse di proprietà del genitore tramite copy-on-write per essere disponibili per il processo figlio; ed exec(), che carica un eseguibile nello spazio degli indirizzi e lo esegue.,
Nel caso in cui un processo figlio muoia prima del suo genitore, il bambino diventa uno zombie fino a quando il genitore non ha raccolto informazioni su di esso o ha indicato al kernel che non ha bisogno di tali informazioni. Le risorse del processo figlio verranno quindi liberate. Se il processo genitore muore prima del bambino, tuttavia, il bambino verrà adottato da init, anche se può anche essere riassegnato a un altro processo.
Come inviare i segnali dei processi in Linux
Tutti i processi in Linux rispondono ai segnali. I segnali sono un modo a livello di sistema operativo per dire ai programmi di terminare o modificare il loro comportamento.,
Come inviare i segnali dei processi tramite PID
Il modo più comune per passare i segnali a un programma è con il comandokill
.
Come ci si potrebbe aspettare, la funzionalità predefinita di questo programma di utilità è quello di tentare di uccidere un processo:
<pre>
kill <span class=”highlight”>PIDoftarget_process</span>
</pre>
Questo invia il segnale TERM per il processo., Il TERMINE segnale indica al processo di terminare. Ciò consente al programma di eseguire operazioni di pulizia e di uscire senza problemi.,
Se il programma funziona in modo anomalo e non uscire una volta dato il segnale TERM, siamo in grado di aumentare il segnale passando il KILL
segnale:
<pre>
kill-KILL <span class=”highlight”>PIDoftarget_process</span>
</pre>
Questo è un segnale speciale che non viene inviato per il programma.,
Invece, è dato al kernel del sistema operativo, che spegne il processo. Questo è usato per bypassare i programmi che ignorano i segnali inviati a loro.
Ogni segnale ha un numero associato che può essere passato al posto del nome. Ad esempio, puoi passare “-15” invece di “-TERM” e “-9” invece di “-KILL”.
Come utilizzare i segnali per altri scopi
I segnali non vengono utilizzati solo per spegnere i programmi. Possono anche essere utilizzati per eseguire altre azioni.
Ad esempio, molti demoni si riavviano quando ricevono ilHUP
, o il segnale di riagganciamento., Apache è un programma che funziona in questo modo.
<pre>
sudo kill-HUP <span class=”highlight”>pidofapache</span>
</pre>
Il comando di cui sopra sarà causa di Apache per ricaricare il suo file di configurazione e ripristinare la pubblicazione di contenuti.,
Puoi elencare tutti i segnali che sono possibili inviare con kill digitando:
kill -l
Come inviare i segnali dei processi per nome
Sebbene il modo convenzionale di inviare segnali sia attraverso l’uso di PID, ci sono anche metodi per farlo con nomi di processo regolari.,
pkill
comando funziona quasi esattamente allo stesso modo kill
, ma opera su un nome di processo invece:
pkill -9 ping
Il comando di cui sopra è l’equivalente di:
kill -9 `pgrep ping`
Se si desidera inviare un segnale ad ogni istanza di un certo processo, è possibile utilizzare il tag killall
comando:
killall firefox
Il comando di cui sopra potranno inviare il segnale TERM per ogni istanza di firefox in esecuzione sul computer.,
Come regolare le priorità dei processi
Spesso, si desidera regolare quali processi hanno la priorità in un ambiente server.
Alcuni processi potrebbero essere considerati mission critical per la tua situazione, mentre altri potrebbero essere eseguiti ogni volta che potrebbero esserci risorse rimanenti.
Linux controlla la priorità attraverso un valore chiamato niceness.
Le attività ad alta priorità sono considerate meno belle, perché non condividono anche le risorse. I processi a bassa priorità, d’altra parte, sono belli perché insistono nel prendere solo risorse minime.,
Quando abbiamo eseguitotop
all’inizio dell’articolo, c’era una colonna contrassegnata con “NI”. Questo è il valore nice del processo:
top
I valori Nice possono variare tra “-19 / -20” (priorità più alta) e “19/20” (priorità più bassa) a seconda del sistema.,
To run a program with a certain nice value, we can use the nice
command:
<pre>
nice -n 15 <span class=”highlight”>commandtoexecute</span>
</pre>
This only works when beginning a new program.,=”9b4b74b24a”>:
<pre>
renice 0 <span class=”highlight”>PIDtoprioritize</span>
</pre>
Nota: Mentre la bella opera con il nome di un comando, la necessità di renice opera chiamando il PID del processo
Conclusione
il Processo di gestione è un argomento che a volte è difficile per i nuovi utenti per afferrare poiché gli strumenti utilizzati sono diversi dai loro grafica controparti.,
Tuttavia, le idee sono familiari e intuitive e, con un po ‘ di pratica, diventeranno naturali. Poiché i processi sono coinvolti in tutto ciò che fai con un sistema informatico, imparare a controllarli efficacemente è un’abilità essenziale.
<div class=”autore”>Da Justin Ellingwood</div>
Leave a Reply