Nov 102013
 

linux-cpu

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:

flattr this!

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>