Linux è molto meglio nell’attività multitasking con uso intensivo del processore rispetto a Windows. Ricordo come la scansione antivirus rendeva il mio vecchio PC con Windows quasi inutilizzabile, ma a volte le brutte cose succedono! Forse un plugin del browser sta usando tutta la CPU, o qualche software scritto male blocca il sistema, oppure Apache sta divorando tutte le risorse sul server.
Se avete visto qualche situazione come questa, non preoccupatevi più, non è necessario uccidere tutti i processi problematici, riavviare la sessione grafica, o peggio ancora riavviare il computer, è sufficiente mettere il processo specifico in “PAUSA” e analizzare la situazione, in alcuni casi, si potrebbe trovare la causa della brutta performance di un processo, o semplicemente possiamo riavviarlo in un secondo momento, magari dopo aver salvato tutti i lavori, quando gli si può dedicare tutta la CPU.
Per spiegare come utilizzare il segnale di STOP per mettere in pausa un processo specifico e il segnale CONT per riavviarlo vi mostrerò un semplice esempio che si può facilmente replicare sul vostro Linux, se volete.
Aprite un terminale come root ed eseguite il comando updatedb
In background come fork di un processo
# updatedb & |
Ora, determinare l’attuale PID del processo con il comando ps
# ps axuw | grep updatedb | grep -v grep root 3264 5.2 0.0 3852 800 pts/0 D 12:35 0:00 updatedb |
Dalle linee qua sopra si può vedere che updatedb
è eseguito con il PID 3264. Prendete nota di questo in quanto ne avrete bisogno per metterlo in pausa.
Ora, verificare che il comando updatedb
sia ancora in fase di elaborazione ed esecuzione
# jobs [1]+ Running updatedb & |
Ora mettiamolo in pausa
# kill -STOP 3264 |
Riverifichiamo che il processo sia ancora attivo
# jobs [1]+ Stopped updatedb # ps axuw | grep update root 3264 1.4 0.0 3852 800 pts/0 T 12:35 0:00 updatedb |
Con i comandi dati qua sopra, abbiamo fermato successo un processo attualmente in esecuzione. Il processo updatedb
con PID 3264 è ora un processo congelato.
Come esempio di arresto, pausa e ripartenza di un processo di linux, ora possiamo continuare a eseguire il processo di linux attualmente fermo:
# kill -CONT 3264 |
Verificate che il processo abbia ripreso a funzionare:
# jobs [1]+ Running updatedb & # ps axuw | grep updatedb root 3272 0.0 0.0 4044 672 pts/0 S+ 12:37 0:00 grep update |
La riga seguente mostra che il processo di updatedb mostra ha terminato il suo lavoro:
[1]+ Done updatedb |
Come si può vedere, il processo updatedb è stato fermato, messo in pausa e fatto ripartire con il comando ‘kill’.
Un modo più semplice
A volte si desidera interrompere tutti i processi in esecuzione di un comando specifico, in questo caso il comando killall
può aiutare a rendere le cose molto più facili, per fermare tutti i processi updatedb è possibile utilizzare il comando
killall -STOP updatedb |
Per riavviarlo, è possibile utilizzare di nuovo killall:
killall -CONT updatedb |
O se volete semplificare ulteriormente, potete inserire queste righe di codice all’interno del file .bashrc del vostro utente, o di root:
pause() { if $(killall -STOP "$1"); then echo "[+] $1 successfully paused!" else echo "[-] Failed to pause $1" fi } unpause() { if $(killall -CONT "$1"); then echo "[+] $1 successfully unpaused!" else echo "[-] Failed to unpause $1" fi } |
E ora sul terminale è possibile usare il comando:
pause updatedb |
e
unpause updatedb |
Riferimenti:
Comment mettre en pause une application et économiser un peu de CPU ?
Stop, Pause, and Continue A Linux Process
Popular Posts:
- None Found
thank you for this nice 2 functions