lavori -l dovrebbe darti il pid per l'elenco dei processi nohup.uccidili (-9) delicatamente.;)
Sto usando red hat linux su un server VPS (e tramite SSH - putty), per me ha funzionato quanto segue:
Innanzitutto, elenchi tutti i processi in esecuzione:
ps -ef
Quindi nella prima colonna trovi il tuo nome utente; L'ho trovato le seguenti tre volte:
- Uno era la connessione SSH
- La seconda era una connessione FTP
- L'ultimo è stato il processo nohup
Quindi nella seconda colonna puoi trovare il PID del processo nohup e digita solo:
kill PID
(ovviamente sostituendo il PID con il PID del processo nohup)
E questo è tutto!
Spero che questa risposta sia utile per qualcuno che sono anche molto nuovo a bash e SSH, ma ho trovato il 95% delle conoscenze di cui ho bisogno qui :)
supponiamo che io stia eseguendo lo script ruby in background con il comando seguente
nohup ruby script.rb &
quindi posso ottenere il pid del processo in background sopra specificando il nome del comando. Nel mio caso il comando è ruby.
ps -ef | grep ruby
uscita
ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb
Ora puoi facilmente terminare il processo usando il comando kill
kill 25938
Quando si utilizza nohup
e metti l'attività in background, l'operatore in background (&
) ti darà il PID al prompt dei comandi. Se il tuo piano è di gestire manualmente il processo, puoi salvare quel PID e usarlo in seguito per terminare il processo se necessario, tramite kill PID
o kill -9 PID
(se hai bisogno di forzare l'uccisione). In alternativa, puoi trovare il PID in seguito tramite ps -ef | grep "command name"
e individuare il PID da lì. Nota che nohup
la parola chiave/comando stesso non appare nel ps
output per il comando in questione.
Se usi uno script, puoi fare qualcosa di simile nello script:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Questo eseguirà my_command
salvando tutto l'output in my.log
(in uno script, $!
rappresenta il PID dell'ultimo processo eseguito). Il 2
è il descrittore di file per l'errore standard (stderr
) e 2>&1
dice alla shell di indirizzare l'output dell'errore standard allo standard output (descrittore di file 1
). Richiede &1
in modo che la shell sappia che è un descrittore di file in quel contesto invece di un semplice file chiamato 1
. Il 2>&1
è necessario per catturare qualsiasi messaggio di errore che normalmente viene scritto in errore standard nel nostro my.log
file (che proviene dallo standard output). Vedi Reindirizzamento I/O per maggiori dettagli sulla gestione del reindirizzamento I/O con la shell.
Se il comando invia l'output regolarmente, puoi controllare l'output occasionalmente con tail my.log
, o se vuoi seguirlo "dal vivo" puoi usare tail -f my.log
. Infine, se hai bisogno di terminare il processo, puoi farlo tramite:
kill -9 `cat save_pid.txt`
rm save_pid.txt