Lab 8: Monitoraggio di Sistema e dei processi¶
Obiettivi¶
Dopo aver completato questo laboratorio, sarete in grado di:
- visualizzare e gestire i processi
- terminare i processi anomali
- modificare la priorità di processo
Tempo stimato per completare questo laboratorio: 60 minuti
Introduzione¶
Questi esercizi trattano vari argomenti relativi al monitoraggio e alla gestione dei processi su sistemi Linux. Gli argomenti trattati includono l'identificazione e il controllo dei processi, la gestione delle priorità dei processi, la gestione dei segnali, il monitoraggio delle risorse e la gestione dei “cgroup”.
Esercizio 1¶
Esplorazione con ps
e /proc
¶
Esplorare e identificare il primo processo di sistema¶
Accedere al sistema come un utente qualsiasi.
Trovare il nome del processo con ID 1 utilizzando /proc.
cat /proc/1/comm
!!! question "Domanda"
Qual è il nome del processo con PID 1?
- Visualizzare il nome e il percorso dell'eseguibile che si trova dietro al processo con PID 1.
ls -l /proc/1/exe
!!! question "Domanda"
Qual è il percorso dell'eseguibile dietro il PID 1?
- Utilizzare il comando
ps
per scoprire il nome del processo o del programma associato al PID 1.
ps -p 1 -o comm=
!!! question "Domanda"
Il comando `ps` conferma il nome del processo?
- Utilizzare il comando
ps
per visualizzare il percorso completo e gli eventuali argomenti della riga di comando del processo o del programma associato al PID 1.
ps -p 1 -o args=
!!! question "Domanda"
Qual è il percorso completo e gli argomenti della riga di comando per il processo con PID 1?
!!! question "Domanda"
Perché il processo con PID 1 è importante su un sistema Linux?
Visualizzazione delle informazioni dettagliate sul processo utilizzando ps
¶
I seguenti passaggi mostrano come utilizzare ps
per visualizzare le informazioni di base sui processi.
- Utilizzare il comando
ps
per visualizzare un elenco di tutti i processi in una struttura ad albero.
ps auxf
!!! question "Domanda"
Qual è la struttura dell'elenco dei processi e quali informazioni vengono visualizzate?
- Filtrare l'elenco in modo da visualizzare solo i processi associati a un utente specifico, ad esempio l'utente “root”.
ps -U root
Verificare che vengano visualizzati solo i processi relativi all'utente “root”.
- Mostrare i processi in un formato dettagliato, inclusi l'albero dei processi e i thread. Digitare:
ps -eH
!!! question "Domanda"
Quali ulteriori dettagli vengono mostrati in questo formato?
- Visualizzare i processi ordinati in base all'utilizzo della CPU in ordine decrescente.
ps aux --sort=-%cpu
!!! question "Domanda"
Quale processo sta consumando più CPU?
Esercizio 2¶
Gestione dei processi con kill
¶
Per terminare un processo utilizzando kill
¶
- Avviare un processo di sospensione a lungo termine in background e visualizzare il PID sul terminale. Digitare:
(sleep 3600 & MYPROC1=$! && echo PID is: $MYPROC1) 2>/dev/null
OUTPUT:
PID is: 1331933
Prendere nota del PID del nuovo processo sul sistema. Il PID viene salvato anche nella variabile $MYPROC1.
- Inviare un segnale di chiusura (SIGTERM) al processo
sleep
.
kill $MYPROC1
Sostituire $MYPROC1 con il PID effettivo ottenuto al punto 1.
- Verificare se il processo è terminato utilizzando
ps
eps aux
.
ps aux | grep -v grep | grep sleep
Per terminare i processi utilizzando i segnali kill
¶
- Avviare un nuovo processo in sospeso e prendere nota del suo PID. Digitare:
(sleep 3600 & MYPROC2=$! && echo PID is: $MYPROC2) 2>/dev/null
OUTPUT:
PID is: 1333258
- Inviare un segnale diverso (ad esempio, SIGHUP) al nuovo processo in sospeso. Digitare:
kill -1 $MYPROC2
Verificare che $MYPROC2 non sia più presente nella tabella dei processi.
- Avviare un nuovo processo ping e prendere nota del suo PID. Digitare:
{ ping localhost > /dev/null 2>&1 & MYPROC3=$!; } \
2>/dev/null; echo "PID is: $MYPROC3"
- Utilizzare il comando
kill
per inviare un segnaleSIGTERM
al processo ping. Digitare:
kill -15 $MYPROC3
Sostituire MYPROC3 con il PID effettivo del processo sul vostro sistema.
- Avviare un processo di lunga durata utilizzando il comando
cat
. Digitare:
{ cat /dev/random > /dev/null 2>&1 & MYPROC4=$!; } \
2>/dev/null; echo PID is: $MYPROC4
Prendere nota del PID del processo sul vostro sistema.
- Utilizzare
kill
per terminare forzatamente il processo inviando un segnale SIGKILL.
kill -9 $MYPROC4
Verificare che il processo sia terminato.
!!! question "Domanda"
Spiegare lo scopo dell'invio di segnali ai processi utilizzando il comando `kill` e il significato dei diversi tipi di segnale.
Esercizio 3¶
Monitoraggio delle risorse di sistema con top
¶
Monitorare l'utilizzo delle risorse di sistema con top
¶
- Eseguire il comando top per visualizzare le statistiche di sistema in tempo reale.
top
!!! question "Domanda"
Quali informazioni vengono visualizzate nell'interfaccia superiore?
- Osservare l'utilizzo della CPU e della memoria dei processi nell'interfaccia superiore.
!!! question "Domanda"
Quali processi consumano più CPU e memoria?
- Ordinare i processi in
top
in base all'utilizzo della CPU (premere P) e all'utilizzo della memoria (premere M).
!!! question "Domanda"
Quali sono i processi che consumano più CPU e memoria dopo l'ordinamento?
Monitorare l'utilizzo della CPU e della memoria per processi specifici utilizzando top
¶
- Creare un file di dimensioni arbitrarie pari a 512 Mb contenente dati casuali.
sudo fallocate -l 512M ~/large-file.data
- Avviare un processo che richieda molte risorse, come la compressione di file di grandi dimensioni.
tar -czf archive.tar.gz /path/to/large/directory
- Aprire il comando
top
per monitorare l'utilizzo della CPU e della memoria.
top
- Individuare e selezionare il processo che richiede molte risorse nell'interfaccia superiore.
!!! question "Domanda"
Qual è l'ID del processo e l'utilizzo delle risorse del processo intensivo?
- Modificare l'ordine di ordinamento in
top
per visualizzare i processi che utilizzano più CPU o memoria (premere P o M).
!!! question "Domanda"
Qual è il processo che si trova in cima alla lista dopo l'ordinamento?
- Uscire da
top
premendoq
.
Monitorare i processi e l'utilizzo delle risorse utilizzando top
¶
- Avviare il comando
top
in modalità interattiva.
top
!!! question "Domanda"
Quali informazioni vengono visualizzate nella schermata superiore?
- Utilizzare il tasto 1 per visualizzare un riepilogo dell'utilizzo dei singoli core della CPU.
!!! question "Domanda"
Qual è la ripartizione dell'utilizzo del core della CPU per ciascun core?
- Premere u per visualizzare i processi di un utente specifico. Inserire il vostro nome utente.
!!! question "Domanda"
Quali processi sono attualmente in esecuzione per il vostro utente?
- Ordinare i processi in base all'utilizzo della memoria (premere M) e osservare i processi che consumano più memoria.
!!! question "Domanda"
Quali processi stanno utilizzando più memoria?
- Uscire da top premendo q.
!!! question "Domanda"
Spiegare l'importanza del monitoraggio delle risorse di sistema mediante il comando `top` e come questo possa aiutare a risolvere i problemi relativi alle prestazioni.
Esercizio 4¶
Modifica della priorità di un processo con nice
e renice
¶
Regolare la priorità del processo utilizzando nice
¶
- Avviare un processo che richieda un uso intensivo della CPU con priorità predefinita/normale. Digitare:
bash -c 'while true; do echo "Default priority: The PID is $$"; done'
OUTPUT:
Default priority: The PID is 2185209
Default priority: The PID is 2185209
Default priority: The PID is 2185209
....<SNIP>...
Dall'output, il valore del PID sul nostro sistema di esempio è 2185209
.
Il valore del PID sarà diverso sul vostro sistema.
Si noti il valore del PID visualizzato continuamente sullo schermo del vostro sistema.
- In un altro terminale, utilizzando il valore PID, controllare la priorità predefinita del processo utilizzando
ps
. Digitare:
ps -p <PID> -o ni
!!! question "Domanda"
Qual è la priorità predefinita del processo in esecuzione (valore `nice`)?
Utilizzando il PID del processo stampato, terminare il processo utilizzando il comando
kill
.Utilizzando il comando
nice
, riavviare un processo simile con un valore di niceness inferiore (ovvero più favorevole al processo O con priorità più alta). Utilizzare un valorenice
pari a-20
. Digitare:
nice -n -20 bash -c 'while true; do echo "High priority: The PID is $$"; done'
- Utilizzando il valore del PID, controllare la priorità del processo utilizzando
ps
. Digitare:
ps -p <PID> -o ni
!!! question "Domanda"
La priorità del processo è stata impostata correttamente?
Premendo contemporaneamente i tasti Ctrl+C sulla tastiera
terminare
il nuovo processo ad alta priorità.Utilizzando nuovamente il comando
nice
, riavviare un altro processo, ma questa volta con un valore di niceness più alto (cioè meno favorevole al processo O con priorità inferiore). Utilizzare un valorenice
pari a19
Digitare:
nice -n 19 bash -c 'while true; do echo "Low priority: The PID is $$"; done'
OUTPUT:
Low priority: The PID is 2180254
Low priority: The PID is 2180254
...<SNIP>...
- Controllare la priorità personalizzata del processo utilizzando
ps
. Digitare:
ps -p <PID> -o ni
Premere contemporaneamente i tasti Ctrl+C sulla tastiera per terminare il nuovo processo a bassa priorità.
Provare a modificare la priorità dei diversi processi assegnando valori più alti o più bassi e osservare l'impatto sull'utilizzo delle risorse del processo.
Per regolare la priorità di un processo in esecuzione utilizzando renice
¶
- Avviare un processo che richieda un uso intensivo della CPU, come un calcolo matematico complesso con l'utilità md5sum. Digitare:
find / -path '/proc/*' -prune -o -type f -exec md5sum {} \; > /dev/null
- Utilizzare il comando
ps
per individuare il PID del processofind/md5sum
precedente. Digitare:
ps -C find -o pid=
OUTPUT:
2577072
Dall'output, il valore del PID sul sistema di esempio è 2577072
.
Il valore del PID sarà diverso sul vostro sistema.
Prendere nota del valore del PID sul sistema.
- Utilizzare il comando
renice
per impostare la priorità del processofind/md5sum
in esecuzione su un valore di niceness inferiore (ad esempio, -10, priorità più alta). Digitare:
renice -n -10 -p $(ps -C find -o pid=)
OUTPUT:
<PID> (process ID) old priority 0, new priority -10
Sostituire <PID>
(sopra) con il PID effettivo del processo in esecuzione.
- Monitorare l'utilizzo delle risorse per il processo
find/md5sum
, utilizzandotop
(ohtop
). Digitare:
top -cp $(ps -C find -o pid=)
!!! question "Domanda"
Il processo ora riceve una quota maggiore di risorse della CPU?
- Modificare la priorità del processo
find/md5sum
impostando un valorenice
più alto (ad esempio 10, priorità più bassa). Digitare:
renice -n 10 -p <PID>
OUTPUT:
2338530 (process ID) old priority -10, new priority 10
Sostituire <PID>
(sopra) con il PID effettivo del processo in esecuzione.
!!! question "Domanda"
Spiegare come viene utilizzato il comando `nice` per regolare le priorità dei processi e come influisce sull'allocazione delle risorse di sistema.
- Premere contemporaneamente i tasti Ctrl+C sulla tastiera per interrompere il processo
find/md5sum
. È anche possibile utilizzare il comandokill
per ottenere lo stesso risultato.
Esercizio 5¶
Identificazione dei processi con pgrep
¶
Trovare i processi in base al nome utilizzando pgrep
¶
- Utilizzare il comando
pgrep
per identificare tutti i processi associati a un programma o servizio specifico, come ad esempiosshd
.
pgrep sshd
!!! question "Domanda"
Quali sono gli ID dei processi `sshd`?
- Verificare l'esistenza dei processi identificati utilizzando il comando
ps
.
ps -p <PID1,PID2,...>
Sostituire “ !!! question "Domanda" !!! question "Domanda" Questo esercizio riguarda la gestione dei processi con Sospendere il processo in foreground premendo Ctrl+Z sulla tastiera. Questo dovrebbe riportarvi al prompt della shell. Elencare i processi sospesi utilizzando il comando !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" Sospendere il processo in esecuzione utilizzando Ctrl+Z. !!! question "Domanda" Sospendere il processo in esecuzione utilizzando Utilizzare il comando !!! question "Domanda" Inserire “Hello” all'interno del file Sospendere la sessione di modifica del testo Avviare un'altra sessione separata dell'editor Inserire il testo di esempio “Hi inside foobar2.txt” nella seconda sessione di vi. Sospendere la seconda sessione vi utilizzando Ctrl+Z. Elencare lo stato di tutti i OUTPUT: Si dovrebbero avere almeno 2 job elencati nell'output. Il numero nella prima colonna dell'output mostra i numeri dei job: [1] e [2]. Sospendere nuovamente la prima sessione Riprendere e portare in foreground la seconda sessione OUTPUT: Selezioniamo un processo in esecuzione standard/comune di cui vogliamo trovare l'ID. Useremo Utilizzare il comando Prendere nota del ID di processo di Sostituire !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" Utilizza Verificare che tutti i processi con il nome “firefox” siano stati terminati. !!! question "Domanda" Questo esercizio riguarda l'uso del potente comando Da notare che il comando precedente è stato chiuso e quello nuovo è in esecuzione. !!! question "Domanda" !!! question "Domanda" Come !!! question "Domanda" !!! question "Domanda" Verificare che tutti i processi con il nome “chrome” siano stati chiusi. !!! question "Domanda" !!! question "Domanda" Sostituire !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" Sostituire !!! question "Domanda" !!! question "Domanda" !!! question "Domanda" Author: Wale Soyinka Contributors: Steven Spencer, Ganna Zhyrnovapgrep
per identificare i processi con un nome specifico, ad esempio “cron”.pgrep cron
Esistono processi con il nome “cron”?
Spiegare la differenza tra l'uso di `ps` e `pgrep` per identificare e gestire i processi.
Esercizio 6¶
Processi in foreground e in background¶
fg
e bg
.Gestire i processi in background e in primo piano utilizzando
bg
e fg
¶sleep
. Digitare:sleep 300
jobs
. Digitare:jobs
Qual è lo stato del lavoro sospeso?
fg
.fg
Cosa succede quando si riporta il lavoro in foreground?
bg
.bg
Qual è lo stato attuale del lavoro?
Spiegare lo scopo dei processi in primo piano e in background e come vengono gestiti utilizzando i comandi `fg` e `bg`.
Avviare un processo in background¶
&
può avviare un processo che viene immediatamente eseguito in background. Ad esempio, per avviare il comando sleep
in background, digitare:sleep 300 &
jobs -l
Qual è lo stato del processo “sleep 300”?
fg
.fg
sleep
inviandogli il segnale SIGSTOP premendo Ctrl+C.Per gestire i processi interattivi utilizzando
bg
e fg
¶vi
per creare e modificare un file di testo di esempio denominato “foobar.txt”. Digitare:vi foobar1.txt
Ctrl
+ Z
.bg
per spostare il processo sospeso in background.bg
Il processo è ora in esecuzione in background?
foobar1.txt
nel vostro editor vi
.vi
in esecuzione premendo Ctrl+Z.vi
per creare un altro file di testo denominato “foobar2.txt”. Digitare:vi foobar2.txt
job
sul terminale corrente. Digitare:jobs -l
[1]- 2977364 Stopped vi foobar1.txt
[2]+ 2977612 Stopped vi foobar2.txt
vi
digitando:fg %1
vi
utilizzando Ctrl+Z.vi
digitando:fg %2
vi
inviando il segnale KILL a entrambi i processi. Eseguire il comando kill
seguito dal comando jobs. Digitare: kill -SIGKILL %1 %2 && jobs
[1]- Killed vi foobar1.txt
[2]+ Killed vi foobar2.txt
Esercizio 7¶
Identificazione dei processi con
pidof
¶Trovare l'ID di processo di un comando in esecuzione utilizzando
pidof
¶systemd
come esempio.pidof
per trovare l'ID del processo di systemd
. Digitare:pidof systemd
systemd
.ps
.ps -p <PID>
<PID>
con l'ID del processo ottenuto al punto 2. Spiegare la differenza tra `pgrep` e `pidof` per trovare l'ID di processo di un comando in esecuzione.
Esercizio 8¶
Esplorazione del filesystem /sys¶
Esplorare il filesystem /sys¶
ls /sys
Che tipo di informazioni sono memorizzate nella directory /sys?
cd /sys/devices/system/cpu
ls
Quali informazioni relative alla CPU sono disponibili nel filesystem /sys?
Spiegare lo scopo del filesystem /sys in Linux e il suo ruolo nella gestione dell'hardware e della configurazione del sistema.
Esercizio 9¶
Arresto dei processi in base al nome con
pkill
¶Terminare i processi in base al nome utilizzando
pkill
¶pkill firefox
Sono stati terminati tutti i processi con il nome “firefox”?
ps
. ps aux | grep firefox
Ci sono processi rimanenti con il nome “firefox”?
pkill
per terminare forzatamente tutti i processi con un nome specifico.pkill -9 firefox
Qual è la differenza tra l'uso di `kill` e `pkill` per terminare i processi in base al nome?
Esercizio 10¶
exec
.Controllo dei processi con
exec
¶Rimpiazzare la shell corrente con un altro comando utilizzando
exec
¶bash
while true; do echo "Running..."; done
exec
. exec echo "This replaces the previous command."
ps
.ps aux | grep "while true"
Il comando precedente è ancora in esecuzione?
Spiega come il comando `exec` può sostituire il processo della shell corrente con un comando diverso.
Esercizio 11¶
Gestione dei processi con
killall
¶kill
, killall
è un comando che consente di terminare i processi in base al nome anziché al PID. Si possono osservare alcune somiglianze tra l'uso di killall
, kill
e pkill
nella chiusura dei processi.Terminare i processi in base al nome utilizzando
killall
¶ killall chrome
Sono stati terminati tutti i processi con il nome “chrome”?
ps
. ps aux | grep chrome
Ci sono processi rimanenti con il nome “chrome”?
killall
per terminare forzatamente tutti i processi con un nome specifico. killall -9 chrome
In che modo `killall` differisce da `pkill` e `kill` quando si terminano i processi in base al nome?
Esercizio 12¶
Gestione di
cgroups
¶Gestire i processi utilizzando
cgroups
¶cgroups
esistenti sul vostro sistema.cat /proc/cgroups
Quali sono i controller `cgroup` disponibili sul vostro sistema?
sudo mkdir -p /sys/fs/cgroup/cpu/mygroup
cgroup
“mygroup”.echo <PID> | sudo tee /sys/fs/cgroup/cpu/mygroup/cgroup.procs
<PID>
con il PID effettivo del processo.cgroup
“mygroup”.cat /sys/fs/cgroup/cpu/mygroup/cgroup.procs
Il processo è elencato nel cgroup “mygroup”?
Spiegare il concetto di “cgroups” in Linux e come questi possono gestire e controllare l'allocazione delle risorse per i processi.
Esercizio 13¶
Gestione dei processi con
renice
¶Regolare la priorità di un processo in esecuzione utilizzando
renice
¶ps
.ps -p <PID> -o ni
Qual è l'attuale priorità (valore nice) del processo?
renice
per modificare la priorità (valore nice) del processo in esecuzione.renice <PRIORITY> -p <PID>
<PRIORITY>
con il nuovo valore di priorità che si desidera impostare e <PID>
con il PID effettivo del processo.ps
.ps -p <PID> -o ni
La priorità ora è diversa?
Cosa succede al consumo di risorse del processo con valori nice diversi?
Spiegare come viene utilizzato il comando renice per regolare la priorità dei processi in esecuzione e i suoi effetti sull'utilizzo delle risorse di processo.