{"id":3639,"date":"2026-07-18T08:45:39","date_gmt":"2026-07-18T06:45:39","guid":{"rendered":"https:\/\/rootmail.it\/courses\/lpic-1-exam-101-010-160-corso-completo-in-italiano\/lessons\/103-5-creare-monitorare-e-terminare-i-processi\/"},"modified":"2026-07-20T21:57:52","modified_gmt":"2026-07-20T19:57:52","slug":"103-5-creare-monitorare-e-terminare-i-processi","status":"publish","type":"lesson","link":"https:\/\/rootmail.it\/en\/courses\/lpic-1-exam-1-101-500-corso-completo-in-italiano\/lessons\/103-5-creare-monitorare-e-terminare-i-processi\/","title":{"rendered":"103.5 Creare, monitorare e terminare i processi"},"content":{"rendered":"<h2>103.5 Creare, monitorare e terminare i processi<\/h2>\n<p>Ogni programma in esecuzione su un sistema Linux viene gestito come un <strong>processo<\/strong>. Dal semplice comando eseguito nel terminale ai servizi di sistema, fino alle applicazioni in background, tutto ci\u00f2 che viene eseguito dal sistema operativo \u00e8 rappresentato da uno o pi\u00f9 processi.<\/p>\n<p>Linux mette a disposizione numerosi strumenti per visualizzare i processi attivi, monitorarne il consumo di risorse, modificarne il comportamento e terminarli quando necessario. Queste competenze sono fondamentali per amministrare un sistema, individuare problemi di prestazioni e gestire applicazioni che non rispondono correttamente.<\/p>\n<p>In questa lezione imparerai a creare e controllare processi, interpretarli attraverso i principali strumenti di monitoraggio e utilizzare i comandi pi\u00f9 comuni per terminarli in modo sicuro.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 fondamentale conoscere i comandi <code>ps<\/code>, <code>top<\/code>, <code>pgrep<\/code>, <code>pstree<\/code>, <code>kill<\/code>, <code>killall<\/code>, <code>pkill<\/code>, <code>nohup<\/code>, <code>jobs<\/code>, <code>bg<\/code>, <code>fg<\/code> e comprendere il funzionamento dei processi in foreground e background.<\/p><\/blockquote>\n<hr \/>\n<h2>\ud83c\udfaf Obiettivi della lezione<\/h2>\n<p>Al termine di questa lezione sarai in grado di:<\/p>\n<ul>\n<li>comprendere cos&#8217;\u00e8 un processo e come viene identificato in Linux;<\/li>\n<li>visualizzare e monitorare i processi in esecuzione;<\/li>\n<li>eseguire programmi in foreground e background;<\/li>\n<li>ricercare processi specifici utilizzando diversi strumenti;<\/li>\n<li>terminare processi in modo corretto utilizzando i segnali appropriati.<\/li>\n<\/ul>\n<hr \/>\n<h2>Argomenti trattati<\/h2>\n<ul>\n<li>Cos&#8217;\u00e8 un processo e il PID (Process ID).<\/li>\n<li>Foreground e background.<\/li>\n<li>Visualizzazione dei processi con <code>ps<\/code>, <code>top<\/code> e <code>pstree<\/code>.<\/li>\n<li>Ricerca dei processi con <code>pgrep<\/code>.<\/li>\n<li>Terminazione dei processi con <code>kill<\/code>, <code>killall<\/code> e <code>pkill<\/code>.<\/li>\n<li>Gestione dei processi con <code>jobs<\/code>, <code>bg<\/code>, <code>fg<\/code> e <code>nohup<\/code>.<\/li>\n<li>Best practice per il monitoraggio e la gestione dei processi.<\/li>\n<\/ul>\n<blockquote><p><strong>\u2328\ufe0f Provalo subito<\/strong><br \/>\nApri un terminale Linux e avvia un programma semplice, come <code>sleep 300<\/code>. Durante la lezione potrai utilizzarlo per sperimentare i comandi di monitoraggio, gestione e terminazione dei processi in totale sicurezza.<\/p><\/blockquote>\n<h2>103.5.1 Processi in foreground e background<\/h2>\n<p>Quando un comando viene eseguito nella shell Linux, normalmente viene avviato in <strong>foreground<\/strong>, occupando il terminale fino al termine della sua esecuzione. Durante questo periodo il terminale non pu\u00f2 essere utilizzato per eseguire altri comandi.<\/p>\n<p>Per attivit\u00e0 che richiedono molto tempo, Linux permette di eseguire un processo in <strong>background<\/strong>, lasciando immediatamente disponibile il terminale per continuare a lavorare.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere la differenza tra processi in foreground e background e sapere come avviare un processo in background utilizzando il simbolo <code>&amp;<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h3>Eseguire un processo in foreground<\/h3>\n<p>Per impostazione predefinita, qualsiasi comando viene eseguito in foreground.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>sleep 30\r\n<\/code><\/pre>\n<p>Il comando rimane in esecuzione per 30 secondi e il terminale resta occupato fino al termine dell&#8217;operazione.<\/p>\n<hr \/>\n<h3>Eseguire un processo in background<\/h3>\n<p>Per avviare direttamente un processo in background \u00e8 sufficiente aggiungere il simbolo <code>&amp;<\/code> alla fine del comando.<\/p>\n<p>Esempio:<\/p>\n<pre><code>long-running-command &amp;\r\n<\/code><\/pre>\n<p>oppure:<\/p>\n<pre><code>sleep 300 &amp;\r\n<\/code><\/pre>\n<p>La shell restituisce immediatamente il controllo del terminale, mentre il processo continua ad essere eseguito in background.<\/p>\n<p>Generalmente viene visualizzato un output simile al seguente:<\/p>\n<pre><code>[1] 24561\r\n<\/code><\/pre>\n<p>dove:<\/p>\n<ul>\n<li><strong>1<\/strong> rappresenta il numero del job;<\/li>\n<li><strong>24561<\/strong> rappresenta il PID (Process ID).<\/li>\n<\/ul>\n<hr \/>\n<h3>Quando utilizzare il background?<\/h3>\n<p>L&#8217;esecuzione in background \u00e8 particolarmente utile per:<\/p>\n<ul>\n<li>backup di grandi quantit\u00e0 di dati;<\/li>\n<li>download di file di grandi dimensioni;<\/li>\n<li>compilazione di software;<\/li>\n<li>script che richiedono diversi minuti o ore per terminare.<\/li>\n<\/ul>\n<p>In questo modo \u00e8 possibile continuare a utilizzare il terminale senza attendere la conclusione del comando.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Un processo avviato con <code>&amp;<\/code> continua l&#8217;esecuzione in background mentre il terminale rimane disponibile per eseguire altri comandi.<\/p><\/blockquote>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Utilizza il background per processi di lunga durata che non richiedono interazione con l&#8217;utente. Per i programmi che necessitano di input da tastiera \u00e8 generalmente preferibile l&#8217;esecuzione in foreground.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li>I processi in foreground occupano il terminale fino al termine dell&#8217;esecuzione.<\/li>\n<li>I processi in background permettono di continuare a utilizzare la shell.<\/li>\n<li>Il simbolo <code>&amp;<\/code> avvia un comando in background.<\/li>\n<li>La shell mostra il numero del job e il PID del processo avviato.<\/li>\n<\/ul>\n<h2>103.5.2 Gestire i processi in background<\/h2>\n<p>Dopo aver avviato un processo in background, Linux mette a disposizione diversi strumenti per gestirlo. \u00c8 possibile sospendere temporaneamente un processo, riprenderne l&#8217;esecuzione in background, riportarlo in foreground oppure visualizzare l&#8217;elenco dei processi appartenenti alla sessione corrente.<\/p>\n<p>Questi strumenti fanno parte della <strong>Job Control<\/strong>, una funzionalit\u00e0 integrata nella shell Bash che permette di amministrare facilmente i processi avviati dall&#8217;utente.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere i comandi <code>jobs<\/code>, <code>bg<\/code> e <code>fg<\/code>, oltre alla combinazione di tasti <strong>Ctrl + Z<\/strong>.<\/p><\/blockquote>\n<hr \/>\n<h3>Sospendere un processo<\/h3>\n<p>Un processo in esecuzione in foreground pu\u00f2 essere sospeso senza essere terminato premendo:<\/p>\n<pre><code>Ctrl + Z\r\n<\/code><\/pre>\n<p>Il processo entra nello stato <strong>Stopped<\/strong> e il controllo ritorna immediatamente alla shell.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>sleep 300\r\n<\/code><\/pre>\n<p>Premendo <strong>Ctrl + Z<\/strong> verr\u00e0 visualizzato un messaggio simile a:<\/p>\n<pre><code>[1]+ Stopped    sleep 300\r\n<\/code><\/pre>\n<p>Il processo non \u00e8 terminato, ma semplicemente sospeso.<\/p>\n<hr \/>\n<h3>Riprendere un processo in background<\/h3>\n<p>Per continuare l&#8217;esecuzione di un processo sospeso in background si utilizza il comando:<\/p>\n<pre><code>bg\r\n<\/code><\/pre>\n<p>Esempio:<\/p>\n<pre><code>sleep 300\r\n^Z\r\nbg\r\n<\/code><\/pre>\n<p>Dopo il comando <code>bg<\/code>, il processo riprender\u00e0 l&#8217;esecuzione senza occupare il terminale.<\/p>\n<hr \/>\n<h3>Riportare un processo in foreground<\/h3>\n<p>Per riportare un processo in background nuovamente in foreground si utilizza:<\/p>\n<pre><code>fg\r\n<\/code><\/pre>\n<p>Il terminale verr\u00e0 nuovamente associato al processo, consentendo all&#8217;utente di interagire con esso.<\/p>\n<p>Se sono presenti pi\u00f9 job, \u00e8 possibile specificarne uno in particolare:<\/p>\n<pre><code>fg %1\r\n<\/code><\/pre>\n<p>dove <code>%1<\/code> rappresenta il numero del job.<\/p>\n<hr \/>\n<h3>Visualizzare i job attivi<\/h3>\n<p>Il comando:<\/p>\n<pre><code>jobs\r\n<\/code><\/pre>\n<p>mostra tutti i processi appartenenti alla shell corrente.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>[1]- Running    sleep 300 &amp;\r\n[2]+ Stopped    nano file.txt\r\n<\/code><\/pre>\n<p>L&#8217;output indica:<\/p>\n<ul>\n<li>il numero del job;<\/li>\n<li>lo stato del processo (<strong>Running<\/strong>, <strong>Stopped<\/strong>, ecc.);<\/li>\n<li>il comando eseguito.<\/li>\n<\/ul>\n<hr \/>\n<h3>Workflow tipico<\/h3>\n<p>Una sequenza molto comune \u00e8 la seguente:<\/p>\n<pre><code>sleep 300\r\nCtrl + Z\r\nbg\r\njobs\r\nfg\r\n<\/code><\/pre>\n<p>Le operazioni eseguite sono:<\/p>\n<ol>\n<li>avvio del processo in foreground;<\/li>\n<li>sospensione mediante <strong>Ctrl + Z<\/strong>;<\/li>\n<li>ripresa del processo in background con <code>bg<\/code>;<\/li>\n<li>visualizzazione dei job con <code>jobs<\/code>;<\/li>\n<li>ritorno del processo in foreground con <code>fg<\/code>.<\/li>\n<\/ol>\n<hr \/>\n<h3>Comandi principali della Job Control<\/h3>\n<table>\n<thead>\n<tr>\n<th>Comando<\/th>\n<th>Funzione<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Ctrl + Z<\/code><\/td>\n<td>Sospende il processo in foreground.<\/td>\n<\/tr>\n<tr>\n<td><code>bg<\/code><\/td>\n<td>Riprende un processo sospeso in background.<\/td>\n<\/tr>\n<tr>\n<td><code>fg<\/code><\/td>\n<td>Riporta un processo in foreground.<\/td>\n<\/tr>\n<tr>\n<td><code>jobs<\/code><\/td>\n<td>Visualizza i job della shell corrente.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> I comandi <code>jobs<\/code>, <code>bg<\/code> e <code>fg<\/code> funzionano esclusivamente sui processi appartenenti alla shell corrente. Per gestire qualsiasi processo del sistema si utilizzano strumenti come <code>ps<\/code>, <code>pgrep<\/code> e <code>kill<\/code>, che vedremo nelle prossime sezioni.<\/p><\/blockquote>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Quando sospendi accidentalmente un processo con <strong>Ctrl + Z<\/strong>, evita di lasciarlo nello stato <strong>Stopped<\/strong>. Decidi se riprenderlo in background con <code>bg<\/code>, riportarlo in foreground con <code>fg<\/code> oppure terminarlo, cos\u00ec da non lasciare processi inutilmente sospesi.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li><strong>Ctrl + Z<\/strong> sospende il processo attualmente in esecuzione.<\/li>\n<li><code>bg<\/code> riprende un processo sospeso in background.<\/li>\n<li><code>fg<\/code> riporta un processo in foreground.<\/li>\n<li><code>jobs<\/code> mostra i processi appartenenti alla shell corrente.<\/li>\n<li>La Job Control consente di gestire facilmente i processi avviati dal terminale.<\/li>\n<\/ul>\n<h2>103.5.3 Garantire la persistenza dei processi<\/h2>\n<p>Normalmente, quando si chiude una sessione del terminale o ci si disconnette dal sistema, tutti i processi avviati da quella sessione vengono terminati automaticamente. Questo comportamento \u00e8 corretto nella maggior parte dei casi, ma pu\u00f2 rappresentare un problema per operazioni di lunga durata, come backup, compilazioni software o script che richiedono molte ore per essere completati.<\/p>\n<p>Per evitare che un processo venga interrotto al termine della sessione \u00e8 possibile utilizzare il comando <code>nohup<\/code> (<strong>No Hang Up<\/strong>).<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere il comando <code>nohup<\/code> e comprendere che permette a un processo di continuare l&#8217;esecuzione anche dopo la chiusura del terminale o il logout dell&#8217;utente.<\/p><\/blockquote>\n<hr \/>\n<h3>Il comando <code>nohup<\/code><\/h3>\n<p>La sintassi generale \u00e8:<\/p>\n<pre><code>nohup comando &amp;\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>nohup long-running-command &amp;\r\n<\/code><\/pre>\n<p>oppure:<\/p>\n<pre><code>nohup backup.sh &amp;\r\n<\/code><\/pre>\n<p>Il processo viene avviato in background e continua ad essere eseguito anche dopo la chiusura della sessione.<\/p>\n<hr \/>\n<h3>Dove viene salvato l&#8217;output?<\/h3>\n<p>Se non viene specificato alcun reindirizzamento, <code>nohup<\/code> salva automaticamente l&#8217;output del programma nel file:<\/p>\n<pre><code>nohup.out\r\n<\/code><\/pre>\n<p>presente nella directory corrente oppure, se non \u00e8 scrivibile, nella directory home dell&#8217;utente.<\/p>\n<p>Per salvare l&#8217;output in un file specifico \u00e8 possibile utilizzare un normale reindirizzamento:<\/p>\n<pre><code>nohup backup.sh &gt; backup.log 2&gt;&amp;1 &amp;\r\n<\/code><\/pre>\n<p>In questo esempio:<\/p>\n<ul>\n<li>il processo continua dopo il logout;<\/li>\n<li>l&#8217;output normale viene salvato in <code>backup.log<\/code>;<\/li>\n<li>anche gli eventuali messaggi di errore vengono registrati nello stesso file.<\/li>\n<\/ul>\n<hr \/>\n<h3>Quando utilizzare <code>nohup<\/code>?<\/h3>\n<p>Il comando \u00e8 particolarmente utile per:<\/p>\n<ul>\n<li>backup di lunga durata;<\/li>\n<li>script di manutenzione;<\/li>\n<li>compilazione di grandi progetti software;<\/li>\n<li>download molto lunghi;<\/li>\n<li>qualsiasi attivit\u00e0 che deve continuare anche dopo il logout.<\/li>\n<\/ul>\n<hr \/>\n<h3><code>nohup<\/code> e il background<\/h3>\n<p>Nella maggior parte dei casi <code>nohup<\/code> viene utilizzato insieme all&#8217;operatore <code>&amp;<\/code>.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>nohup long-running-command &amp;\r\n<\/code><\/pre>\n<p>Le due funzionalit\u00e0 svolgono ruoli differenti:<\/p>\n<ul>\n<li><code>&amp;<\/code> avvia il processo in background;<\/li>\n<li><code>nohup<\/code> impedisce che il processo venga terminato al logout.<\/li>\n<\/ul>\n<p>Utilizzati insieme consentono di eseguire processi indipendenti dalla sessione del terminale.<\/p>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Quando utilizzi <code>nohup<\/code>, reindirizza sempre l&#8217;output verso un file di log. In questo modo potrai verificare l&#8217;avanzamento del processo anche dopo esserti disconnesso dal sistema.<\/p>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> <code>nohup<\/code> non sostituisce strumenti come <code>screen<\/code> o <code>tmux<\/code>, che consentono di riprendere una sessione interattiva. Il suo scopo \u00e8 permettere a un processo di continuare l&#8217;esecuzione dopo il logout.<\/p><\/blockquote>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li><code>nohup<\/code> permette a un processo di continuare l&#8217;esecuzione anche dopo il logout.<\/li>\n<li>Viene normalmente utilizzato insieme all&#8217;operatore <code>&amp;<\/code>.<\/li>\n<li>Se non diversamente specificato, l&#8217;output viene salvato nel file <code>nohup.out<\/code>.<\/li>\n<li>\u00c8 consigliabile reindirizzare l&#8217;output verso un file di log dedicato.<\/li>\n<li><code>nohup<\/code> \u00e8 ideale per processi lunghi che non richiedono interazione con l&#8217;utente.<\/li>\n<\/ul>\n<h2>103.5.5 Inviare segnali ai processi<\/h2>\n<p>Linux permette di controllare il comportamento dei processi inviando loro dei <strong>segnali (signals)<\/strong>. Un segnale \u00e8 un messaggio inviato dal kernel o da un altro processo per richiedere una determinata azione, come terminare un programma, interromperlo temporaneamente o ricaricarne la configurazione.<\/p>\n<p>Per inviare segnali si utilizzano principalmente i comandi <code>kill<\/code>, <code>pkill<\/code>, <code>pgrep<\/code> e <code>killall<\/code>.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere il comando <code>kill<\/code>, i segnali pi\u00f9 comuni (<code>SIGTERM<\/code> e <code>SIGKILL<\/code>) e sapere utilizzare <code>pgrep<\/code>, <code>pkill<\/code> e <code>killall<\/code>.<\/p><\/blockquote>\n<hr \/>\n<h3>I segnali in Linux<\/h3>\n<p>Contrariamente a quanto suggerisce il nome, il comando <code>kill<\/code> non serve esclusivamente a terminare i processi.<\/p>\n<p>Il suo vero scopo \u00e8 <strong>inviare un segnale<\/strong> a un processo.<\/p>\n<p>I segnali pi\u00f9 utilizzati sono:<\/p>\n<table>\n<thead>\n<tr>\n<th>Segnale<\/th>\n<th>Numero<\/th>\n<th>Descrizione<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>SIGTERM<\/code><\/td>\n<td>15<\/td>\n<td>Richiede la terminazione ordinata del processo (predefinito).<\/td>\n<\/tr>\n<tr>\n<td><code>SIGKILL<\/code><\/td>\n<td>9<\/td>\n<td>Termina immediatamente il processo senza possibilit\u00e0 di intercettare il segnale.<\/td>\n<\/tr>\n<tr>\n<td><code>SIGINT<\/code><\/td>\n<td>2<\/td>\n<td>Interrompe il processo (equivalente a <strong>Ctrl + C<\/strong>).<\/td>\n<\/tr>\n<tr>\n<td><code>SIGHUP<\/code><\/td>\n<td>1<\/td>\n<td>Comunica al processo di ricaricare la configurazione o segnala la chiusura della sessione.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>Terminare un processo con <code>kill<\/code><\/h3>\n<p>Per inviare il segnale predefinito (<code>SIGTERM<\/code>) si utilizza:<\/p>\n<pre><code>kill PID\r\n<\/code><\/pre>\n<p>oppure:<\/p>\n<pre><code>kill -15 PID\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>kill 24561\r\n<\/code><\/pre>\n<p>Il processo riceve una richiesta di terminazione e, se possibile, pu\u00f2 chiudersi correttamente salvando dati e liberando le risorse utilizzate.<\/p>\n<hr \/>\n<h3>Terminare forzatamente un processo<\/h3>\n<p>Se un processo non risponde al segnale <code>SIGTERM<\/code>, \u00e8 possibile inviare il segnale <code>SIGKILL<\/code>:<\/p>\n<pre><code>kill -9 PID\r\n<\/code><\/pre>\n<p>Ad esempio:<\/p>\n<pre><code>kill -9 24561\r\n<\/code><\/pre>\n<blockquote><p><strong>\u26a0\ufe0f Attenzione<\/strong> <code>SIGKILL<\/code> termina immediatamente il processo senza permettergli di eseguire operazioni di chiusura. Utilizzalo solo quando il normale <code>SIGTERM<\/code> non \u00e8 sufficiente.<\/p><\/blockquote>\n<hr \/>\n<h3>Ricercare processi con <code>pgrep<\/code><\/h3>\n<p>Il comando <code>pgrep<\/code> consente di individuare i PID dei processi in base al loro nome.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>pgrep firefox\r\n<\/code><\/pre>\n<p>L&#8217;output conterr\u00e0 uno o pi\u00f9 PID relativi ai processi trovati.<\/p>\n<p>Questo comando \u00e8 particolarmente utile negli script Bash.<\/p>\n<hr \/>\n<h3>Terminare processi con <code>pkill<\/code><\/h3>\n<p>Il comando <code>pkill<\/code> combina le funzionalit\u00e0 di <code>pgrep<\/code> e <code>kill<\/code>, consentendo di inviare un segnale direttamente ai processi identificati dal nome.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>pkill firefox\r\n<\/code><\/pre>\n<p>Tutti i processi chiamati <code>firefox<\/code> riceveranno il segnale predefinito <code>SIGTERM<\/code>.<\/p>\n<hr \/>\n<h3>Terminare tutti i processi con <code>killall<\/code><\/h3>\n<p>Il comando <code>killall<\/code> invia un segnale a tutte le istanze di un determinato programma.<\/p>\n<p>Esempio:<\/p>\n<pre><code>killall firefox\r\n<\/code><\/pre>\n<p>Tutti i processi con quel nome verranno terminati.<\/p>\n<p>A differenza di <code>kill<\/code>, non \u00e8 necessario conoscere il PID del processo.<\/p>\n<hr \/>\n<h3>Quale comando utilizzare?<\/h3>\n<table>\n<thead>\n<tr>\n<th>Comando<\/th>\n<th>Utilizzo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>kill<\/code><\/td>\n<td>Invia un segnale a un PID specifico.<\/td>\n<\/tr>\n<tr>\n<td><code>pgrep<\/code><\/td>\n<td>Ricerca i PID dei processi in base al nome.<\/td>\n<\/tr>\n<tr>\n<td><code>pkill<\/code><\/td>\n<td>Invia un segnale ai processi identificati dal nome.<\/td>\n<\/tr>\n<tr>\n<td><code>killall<\/code><\/td>\n<td>Invia un segnale a tutte le istanze di un programma.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> Prima di utilizzare <code>kill -9<\/code>, prova sempre il comando <code>kill<\/code> senza specificare alcun segnale. La terminazione &#8220;gentile&#8221; tramite <code>SIGTERM<\/code> \u00e8 la pratica consigliata e consente ai programmi di chiudersi correttamente.<\/p><\/blockquote>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Utilizza <code>pgrep<\/code> per individuare il PID di un processo e invia inizialmente il segnale <code>SIGTERM<\/code> mediante <code>kill<\/code>. Ricorri a <code>SIGKILL<\/code> (<code>kill -9<\/code>) solo come ultima soluzione, quando il processo non risponde ai normali segnali di terminazione.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li><code>kill<\/code> invia un segnale a un processo identificato dal PID.<\/li>\n<li><code>SIGTERM<\/code> (15) richiede una terminazione ordinata ed \u00e8 il segnale predefinito.<\/li>\n<li><code>SIGKILL<\/code> (9) termina immediatamente il processo.<\/li>\n<li><code>pgrep<\/code> ricerca i processi in base al nome.<\/li>\n<li><code>pkill<\/code> invia segnali ai processi trovati tramite il nome.<\/li>\n<li><code>killall<\/code> termina tutte le istanze di un determinato programma.<\/li>\n<\/ul>\n<h2>103.5.6 Strumenti avanzati di monitoraggio<\/h2>\n<p>Oltre ai comandi tradizionali per monitorare i processi, Linux mette a disposizione strumenti che consentono di osservare continuamente lo stato del sistema oppure di mantenere attive sessioni di terminale anche dopo la disconnessione dell&#8217;utente.<\/p>\n<p>Tra questi troviamo il comando <code>watch<\/code> e i terminal multiplexer <code>screen<\/code> e <code>tmux<\/code>, strumenti molto diffusi nell&#8217;amministrazione di server remoti.<\/p>\n<blockquote><p><strong>\ud83d\udca1 Exam Tip<\/strong> Per l&#8217;esame LPIC-1 \u00e8 importante conoscere lo scopo del comando <code>watch<\/code> e sapere che <code>screen<\/code> e <code>tmux<\/code> permettono di mantenere sessioni di terminale persistenti.<\/p><\/blockquote>\n<hr \/>\n<h3>Monitorare un comando con <code>watch<\/code><\/h3>\n<p>Il comando <code>watch<\/code> esegue automaticamente un comando a intervalli regolari, aggiornandone continuamente il risultato sullo schermo.<\/p>\n<p>La sintassi generale \u00e8:<\/p>\n<pre><code>watch comando\r\n<\/code><\/pre>\n<p>Ad esempio, per monitorare l&#8217;utilizzo della memoria:<\/p>\n<pre><code>watch free -h\r\n<\/code><\/pre>\n<p>L&#8217;output verr\u00e0 aggiornato automaticamente ogni due secondi.<\/p>\n<p>\u00c8 possibile modificare l&#8217;intervallo di aggiornamento con l&#8217;opzione <code>-n<\/code>.<\/p>\n<p>Ad esempio:<\/p>\n<pre><code>watch -n 5 free -h\r\n<\/code><\/pre>\n<p>In questo caso il comando verr\u00e0 eseguito ogni cinque secondi.<\/p>\n<p>Il comando <code>watch<\/code> \u00e8 molto utile per monitorare:<\/p>\n<ul>\n<li>l&#8217;utilizzo della memoria;<\/li>\n<li>lo spazio disponibile sui dischi;<\/li>\n<li>i processi attivi;<\/li>\n<li>lo stato di file o servizi di sistema.<\/li>\n<\/ul>\n<hr \/>\n<h3>Sessioni persistenti con <code>screen<\/code><\/h3>\n<p><code>screen<\/code> \u00e8 un <strong>terminal multiplexer<\/strong>, cio\u00e8 un programma che consente di creare e gestire pi\u00f9 sessioni di terminale indipendenti.<\/p>\n<p>Per avviare una nuova sessione:<\/p>\n<pre><code>screen -S session_name\r\n<\/code><\/pre>\n<p>Una volta creata, la sessione pu\u00f2 essere scollegata (<em>detached<\/em>) e lasciata in esecuzione anche dopo il logout.<\/p>\n<p>Successivamente \u00e8 possibile riconnettersi alla stessa sessione senza interrompere i processi in esecuzione.<\/p>\n<hr \/>\n<h3>Sessioni persistenti con <code>tmux<\/code><\/h3>\n<p><code>tmux<\/code> offre funzionalit\u00e0 simili a <code>screen<\/code> ed \u00e8 oggi molto diffuso negli ambienti Linux.<\/p>\n<p>Per creare una nuova sessione:<\/p>\n<pre><code>tmux new -s session_name\r\n<\/code><\/pre>\n<p>Come <code>screen<\/code>, permette di:<\/p>\n<ul>\n<li>mantenere attivi processi anche dopo la disconnessione;<\/li>\n<li>gestire pi\u00f9 terminali all&#8217;interno della stessa finestra;<\/li>\n<li>ricollegarsi successivamente alla sessione.<\/li>\n<\/ul>\n<hr \/>\n<h3>Quando utilizzare questi strumenti?<\/h3>\n<table>\n<thead>\n<tr>\n<th>Strumento<\/th>\n<th>Utilizzo principale<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>watch<\/code><\/td>\n<td>Monitora periodicamente l&#8217;output di un comando.<\/td>\n<\/tr>\n<tr>\n<td><code>screen<\/code><\/td>\n<td>Crea sessioni di terminale persistenti.<\/td>\n<\/tr>\n<tr>\n<td><code>tmux<\/code><\/td>\n<td>Gestisce sessioni di terminale persistenti e multiple.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>\ud83d\udccc Da ricordare<\/strong> A differenza di <code>nohup<\/code>, che mantiene in esecuzione un singolo processo dopo il logout, <code>screen<\/code> e <code>tmux<\/code> consentono di riprendere un&#8217;intera sessione di terminale, con tutti i programmi ancora attivi.<\/p><\/blockquote>\n<hr \/>\n<h3>Best Practice<\/h3>\n<p>Quando lavori su server remoti tramite SSH ed esegui operazioni di lunga durata, utilizza <code>screen<\/code> o <code>tmux<\/code>. In questo modo potrai disconnetterti e riconnetterti successivamente senza interrompere i processi in esecuzione.<\/p>\n<hr \/>\n<h3>Riepilogo<\/h3>\n<ul>\n<li><code>watch<\/code> esegue periodicamente un comando e ne aggiorna automaticamente l&#8217;output.<\/li>\n<li>L&#8217;opzione <code>-n<\/code> permette di impostare l&#8217;intervallo di aggiornamento.<\/li>\n<li><code>screen<\/code> crea sessioni di terminale persistenti.<\/li>\n<li><code>tmux<\/code> offre funzionalit\u00e0 simili a <code>screen<\/code>, consentendo di gestire pi\u00f9 terminali e sessioni persistenti.<\/li>\n<li>Entrambi permettono di continuare il lavoro anche dopo la chiusura della connessione SSH.<\/li>\n<\/ul>\n<h2>\ud83d\udcda Riepilogo della lezione<\/h2>\n<p>In questa lezione hai imparato come Linux gestisce i processi e come controllarne l&#8217;esecuzione dalla riga di comando. Hai scoperto la differenza tra processi eseguiti in foreground e background, come monitorare le risorse del sistema e come intervenire sui processi mediante segnali e strumenti dedicati.<\/p>\n<p>Hai inoltre approfondito l&#8217;utilizzo della <strong>Job Control<\/strong>, dei comandi di monitoraggio e degli strumenti che consentono di mantenere attive le sessioni di lavoro anche dopo la disconnessione dal sistema.<\/p>\n<h3>Concetti principali<\/h3>\n<ul>\n<li>Hai compreso la differenza tra processi eseguiti in <strong>foreground<\/strong> e <strong>background<\/strong>.<\/li>\n<li>Hai imparato a gestire i job con <code>jobs<\/code>, <code>bg<\/code> e <code>fg<\/code>.<\/li>\n<li>Hai utilizzato <code>nohup<\/code> per mantenere in esecuzione un processo anche dopo il logout.<\/li>\n<li>Hai imparato a monitorare i processi mediante <code>ps<\/code>, <code>top<\/code>, <code>uptime<\/code> e <code>free<\/code>.<\/li>\n<li>Hai scoperto come inviare segnali ai processi utilizzando <code>kill<\/code>, <code>pgrep<\/code>, <code>pkill<\/code> e <code>killall<\/code>.<\/li>\n<li>Hai conosciuto il comando <code>watch<\/code> e il funzionamento dei terminal multiplexer <code>screen<\/code> e <code>tmux<\/code>.<\/li>\n<\/ul>\n<blockquote><p><strong>\ud83c\udfaf Obiettivo raggiunto<\/strong> Al termine di questa lezione sei in grado di creare, monitorare e gestire i processi Linux, controllarne il consumo di risorse, mantenerli in esecuzione anche dopo il logout e terminarli utilizzando gli strumenti e i segnali pi\u00f9 appropriati.<\/p><\/blockquote>\n<h3>Comandi da ricordare<\/h3>\n<table>\n<thead>\n<tr>\n<th>Comando<\/th>\n<th>Descrizione<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>&amp;<\/code><\/td>\n<td>Avvia un processo in background.<\/td>\n<\/tr>\n<tr>\n<td><code>jobs<\/code><\/td>\n<td>Visualizza i job della shell corrente.<\/td>\n<\/tr>\n<tr>\n<td><code>bg<\/code><\/td>\n<td>Riprende un processo sospeso in background.<\/td>\n<\/tr>\n<tr>\n<td><code>fg<\/code><\/td>\n<td>Riporta un processo in foreground.<\/td>\n<\/tr>\n<tr>\n<td><code>nohup<\/code><\/td>\n<td>Mantiene un processo in esecuzione dopo il logout.<\/td>\n<\/tr>\n<tr>\n<td><code>ps<\/code><\/td>\n<td>Visualizza una fotografia dei processi in esecuzione.<\/td>\n<\/tr>\n<tr>\n<td><code>top<\/code><\/td>\n<td>Monitora processi e risorse in tempo reale.<\/td>\n<\/tr>\n<tr>\n<td><code>uptime<\/code><\/td>\n<td>Mostra il tempo di attivit\u00e0 e il Load Average del sistema.<\/td>\n<\/tr>\n<tr>\n<td><code>free -h<\/code><\/td>\n<td>Visualizza l&#8217;utilizzo della memoria RAM e della swap.<\/td>\n<\/tr>\n<tr>\n<td><code>kill<\/code><\/td>\n<td>Invia un segnale a un processo tramite il PID.<\/td>\n<\/tr>\n<tr>\n<td><code>pgrep<\/code><\/td>\n<td>Ricerca processi in base al nome.<\/td>\n<\/tr>\n<tr>\n<td><code>pkill<\/code><\/td>\n<td>Invia segnali ai processi individuati tramite il nome.<\/td>\n<\/tr>\n<tr>\n<td><code>killall<\/code><\/td>\n<td>Invia un segnale a tutte le istanze di un programma.<\/td>\n<\/tr>\n<tr>\n<td><code>watch<\/code><\/td>\n<td>Esegue periodicamente un comando aggiornandone l&#8217;output.<\/td>\n<\/tr>\n<tr>\n<td><code>screen<\/code><\/td>\n<td>Gestisce sessioni di terminale persistenti.<\/td>\n<\/tr>\n<tr>\n<td><code>tmux<\/code><\/td>\n<td>Gestisce sessioni di terminale persistenti e multiple.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<blockquote><p><strong>\ud83d\udca1 Preparazione all&#8217;esame LPIC-1<\/strong> Prima di proseguire assicurati di conoscere la differenza tra foreground e background, il funzionamento della Job Control, i principali comandi di monitoraggio dei processi e i segnali <code>SIGTERM<\/code> e <code>SIGKILL<\/code>. Questi argomenti costituiscono una parte fondamentale dell&#8217;esame LPIC-1 e dell&#8217;amministrazione quotidiana dei sistemi Linux.<\/p><\/blockquote>\n<hr \/>\n<h2>\u27a1\ufe0f Prossima lezione<\/h2>\n<p>Nella prossima lezione (<strong>103.6 Modificare la priorit\u00e0 di esecuzione dei processi<\/strong>) scoprirai come Linux assegna le risorse della CPU ai processi. Imparerai a utilizzare i comandi <code>nice<\/code> e <code>renice<\/code> per modificare la priorit\u00e0 di esecuzione delle applicazioni e ottimizzare il comportamento del sistema.<\/p>\n<blockquote><p><strong>\ud83d\udcd6 Materiale di approfondimento<\/strong> Consulta il PDF allegato alla lezione per esercitarti con laboratori guidati, scenari realistici e quiz di autovalutazione.<\/p><\/blockquote>\n","protected":false},"comment_status":"open","ping_status":"closed","template":"","class_list":["post-3639","lesson","type-lesson","status-publish","has-post-thumbnail","hentry"],"uagb_featured_image_src":[],"uagb_author_info":{"display_name":"Rootmail Academy","author_link":"https:\/\/rootmail.it\/en\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"103.5 Creare, monitorare e terminare i processi Ogni programma in esecuzione su un sistema Linux viene gestito come un processo. Dal semplice comando eseguito nel terminale ai servizi di sistema, fino alle applicazioni in background, tutto ci\u00f2 che viene eseguito dal sistema operativo \u00e8 rappresentato da uno o pi\u00f9 processi. Linux mette a disposizione numerosi&hellip;","_links":{"self":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/lesson\/3639","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/lesson"}],"about":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/types\/lesson"}],"replies":[{"embeddable":true,"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/comments?post=3639"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/media\/3677"}],"wp:attachment":[{"href":"https:\/\/rootmail.it\/en\/wp-json\/wp\/v2\/media?parent=3639"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}