Bash                
            Lavori e processi
        
        
            
    Ricerca…
Elenca i lavori correnti
$ tail -f /var/log/syslog > log.txt
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
$ sleep 10 &
$ jobs
[1]+  Stopped                 tail -f /var/log/syslog > log.txt
[2]-  Running                 sleep 10 &
Gestione del lavoro
Creazione di posti di lavoro
 Per creare un lavoro, aggiungi un singolo & dopo il comando: 
$ sleep 10 &
[1] 20024
Puoi anche fare un processo in esecuzione un lavoro premendo Ctrl + z :
$ sleep 10
^Z
[1]+  Stopped                 sleep 10
Sfondo e primo piano un processo
 Per portare il processo in primo piano, il comando fg viene utilizzato insieme a % 
$ sleep 10 &
[1] 20024
$ fg %1
sleep 10
 Ora puoi interagire con il processo. Per riportarlo sullo sfondo puoi usare il comando bg . A causa della sessione del terminale occupata, è necessario interrompere prima il processo premendo Ctrl + z . 
$ sleep 10
^Z
[1]+  Stopped              sleep 10
$ bg %1
[1]+ sleep 10 &
 A causa della pigrizia di alcuni programmatori, tutti questi comandi funzionano anche con una singola % se esiste un solo processo o per il primo processo nell'elenco. Per esempio: 
$ sleep 10 &
[1] 20024
$ fg %        # to bring a process to foreground 'fg %' is also working.
sleep 10
o semplicemente
$ %           # laziness knows no boundaries, '%' is also working.
sleep 10
 Inoltre, semplicemente digitando fg o bg senza alcun argomento si gestisce l'ultimo lavoro: 
$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20
Uccisione di lavori in corso
$ sleep 10 &
[1] 20024
$ kill %1
[1]+  Terminated              sleep 10
 Il processo di sospensione viene eseguito in background con ID processo (pid) 20024 e numero di lavoro 1 . Per fare riferimento al processo, è possibile utilizzare il pid o il numero del lavoro. Se si utilizza il numero del lavoro, è necessario prefisso con % . Il segnale di kill predefinito inviato da kill è SIGTERM , che consente al processo di destinazione di uscire con garbo. 
 Di seguito sono mostrati alcuni segnali di uccisione comuni. Per vedere un elenco completo, esegui kill -l . 
| Nome del segnale | Valore del segnale | Effetto | 
|---|---|---|
| SIGHUP | 1 | Appendere | 
| SIGINT | 2 | Interrompere dalla tastiera | 
| SIGKILL | 9 | Uccidere il segnale | 
| SIGTERM | 15 | Segnale di terminazione | 
Avvia e uccide processi specifici
 Probabilmente il modo più semplice per uccidere un processo in esecuzione è selezionarlo attraverso il nome del processo come nell'esempio seguente usando il comando pkill come 
pkill -f test.py
 (o) un modo più a prova di pazzo usando pgrep per cercare l'id-processo vero e proprio 
kill $(pgrep -f 'python test.py')
 Lo stesso risultato può essere ottenuto usando grep su ps -ef | grep name_of_process quindi uccide il processo associato al pid risultante (id processo). Selezionare un processo usando il suo nome è conveniente in un ambiente di test, ma può essere molto pericoloso quando lo script viene utilizzato in produzione: è praticamente impossibile essere sicuri che il nome corrisponda al processo che si desidera effettivamente uccidere. In questi casi, il seguente approccio è molto più sicuro. 
 Inizia lo script che alla fine verrà ucciso con il seguente approccio. Supponiamo che il comando che vuoi eseguire ed eventualmente uccidere sia python test.py 
#!/bin/bash
if [[ ! -e /tmp/test.py.pid ]]; then   # Check if the file already exists
    python test.py &                   #+and if so do not run another process.
    echo $! > /tmp/test.py.pid
else
    echo -n "ERROR: The process is already running with pid "
    cat /tmp/test.py.pid
    echo
fi
 Questo creerà un file nella /tmp contenente il pid del processo python test.py Se il file esiste già, assumiamo che il comando sia già in esecuzione e lo script restituisca un errore. 
Quindi, quando vuoi ucciderlo usa il seguente script:
#!/bin/bash
if [[ -e /tmp/test.py.pid ]]; then   # If the file do not exists, then the
    kill `cat /tmp/test.py.pid`      #+the process is not running. Useless
    rm /tmp/test.py.pid              #+trying to kill it.
else
    echo "test.py is not running"
fi
questo ucciderà esattamente il processo associato al tuo comando, senza fare affidamento su alcuna informazione volatile (come la stringa usata per eseguire il comando). Anche in questo caso se il file non esiste, lo script presuppone che si desideri terminare un processo non in esecuzione.
Questo ultimo esempio può essere facilmente migliorato per l'esecuzione dello stesso comando più volte (aggiungendo il file pid invece di sovrascriverlo, ad esempio) e per gestire i casi in cui il processo muore prima di essere ucciso.
Elenca tutti i processi
Esistono due metodi comuni per elencare tutti i processi su un sistema. Entrambi elencano tutti i processi in esecuzione da parte di tutti gli utenti, sebbene differiscano nel formato che emettono (il motivo per cui le differenze sono storiche).
ps -ef   # lists all processes 
ps aux   # lists all processes in alternative format (BSD)
Questo può essere usato per verificare se una determinata applicazione è in esecuzione. Ad esempio, per verificare se il server SSH (sshd) è in esecuzione:
ps -ef | grep sshd
Verifica quale processo è in esecuzione su una porta specifica
Per verificare quale processo è in esecuzione sulla porta 8080
lsof -i :8080
Ricerca di informazioni su un processo in esecuzione
 ps aux | grep <search-term> mostra i processi che corrispondono al termine di ricerca 
Esempio:
root@server7:~# ps aux | grep nginx
root       315  0.0  0.3 144392  1020 ?        Ss   May28   0:00 nginx: master process /usr/sbin/nginx
www-data  5647  0.0  1.1 145124  3048 ?        S    Jul18   2:53 nginx: worker process
www-data  5648  0.0  0.1 144392   376 ?        S    Jul18   0:00 nginx: cache manager process
root     13134  0.0  0.3   4960   920 pts/0    S+   14:33   0:00 grep --color=auto nginx
root@server7:~#
 Qui, la seconda colonna è l'id del processo. Ad esempio, se si desidera annullare il processo nginx, è possibile utilizzare il comando kill 5647 . Si consiglia sempre di utilizzare il comando kill con SIGTERM anziché SIGKILL . 
Scartare il lavoro in background
$ gzip extremelylargefile.txt &
$ bg
$ disown %1
Ciò consente di continuare un processo di lunga durata una volta che la shell (terminale, ssh, ecc.) È chiusa.