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