Come ottenere l’ID del processo per terminare un processo nohup?

Sto eseguendo un processo nohup sul server. Quando provo ad ucciderlo, la mia console di mastice si chiude invece.

questo è il modo in cui cerco di trovare l’ID del processo:

ps -ef |grep nohup 

questo è il comando per uccidere

  kill -9 1787 787 

    Quando si utilizza nohup e si mette l’attività in background, l’operatore in background ( & ) vi darà il PID al prompt dei comandi. Se il tuo piano è quello di gestire manualmente il processo, puoi salvare quel PID e usarlo in seguito per uccidere il processo, se necessario, tramite kill PID o kill -9 PID (se devi forzare l’uccisione). In alternativa, puoi trovare il PID in seguito da ps -ef | grep "command name" ps -ef | grep "command name" e individuare il PID da lì. Si noti che nohup parola chiave / comando stesso non appare nell’output ps per il comando in questione.

    Se hai usato uno script, potresti fare qualcosa come:

     nohup my_command > my.log 2>&1 & echo $! > save_pid.txt 

    Questo eseguirà my_command salvando tutti gli output in my.log (in uno script, $! Rappresenta il PID dell’ultimo processo eseguito). Il 2 è il descrittore di file per errore standard ( stderr ) e 2>&1 indica alla shell di instradare l’output di errore standard all’output standard (descrittore di file 1 ). Richiede &1 modo che la shell sappia che si tratta di un descrittore di file in quel contesto anziché solo di un file di nome 1 . Il 2>&1 è necessario per catturare qualsiasi messaggio di errore che normalmente viene scritto su errore standard nel nostro file my.log (che proviene dallo standard output). Vedi Redirezione I / O per maggiori dettagli sulla gestione del reindirizzamento I / O con la shell.

    Se il comando invia l’output su base regolare, è ansible controllare occasionalmente l’output con tail my.log o, se si desidera seguirlo “live”, è ansible utilizzare tail -f my.log . Infine, se hai bisogno di uccidere il processo, puoi farlo tramite:

     kill -9 `cat save_pid.txt` rm save_pid.txt 

    Sto usando Red Hat Linux su un server VPS (e via SSH – putty), per me ha funzionato:

    Innanzitutto, elencherai 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
    • Il secondo era una connessione FTP
    • L’ultimo era il processo nohup

    Quindi nella seconda colonna puoi trovare il PID del processo nohup e devi solo digitare:

     kill PID 

    (sostituendo il PID con il PID del processo nohup ovviamente)

    E questo è tutto!

    Spero che questa risposta sia utile per qualcuno Sono anche molto nuovo per bash e SSH, ma ho trovato il 95% delle conoscenze di cui ho bisogno qui 🙂

    Supponiamo che io stia eseguendo script ruby ​​in background con il comando di sotto

     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 

    produzione

     ubuntu 25938 25742 0 05:16 pts/0 00:00:00 ruby test.rb 

    Ora puoi facilmente uccidere il processo usando il comando kill

     kill 25938 

    jobs -l dovrebbe darti il ​​pid per la lista dei processi nohup. uccidili (-9) delicatamente. 😉

    Potresti provare

     kill -9 `pgrep [command name]` 

    Questo funziona su Ubuntu

    Digita questo per scoprire il PID

     ps aux | grep java 

    Verranno mostrati tutti i processi in corso relativi a java

    Nel mio caso lo è

     johnjoe 3315 9.1 4.0 1465240 335728 ? Sl 09:42 3:19 java -jar batch.jar 

    Ora uccidilo kill -9 3315

    Il processo zombi finalmente si fermò.

    Ho avviato il server django con il seguente comando.

     nohup manage.py runserver  

    Funziona su CentOS:

     :~ ns$netstat -ntlp :~ ns$kill -9 PID 

    Supponiamo che tu stia eseguendo un programma java con nohup puoi ottenere l’id del processo java

     `ps aux | grep java` 

    produzione

     xxxxx 9643 0.0 0.0 14232 968 pts/2 

    allora puoi uccidere il processo digitando

     sudo kill 9643 

    o diciamo che è necessario uccidere tutti i processi java e quindi usarli

     sudo killall java 

    questo comando uccide tutti i processori java. puoi usare questo con il processo. basta dare il nome del processo alla fine del comando

     sudo killall {processName}