¿Cómo obtener la ID del proceso para matar un proceso nohup?

Estoy ejecutando un proceso nohup en el servidor. Cuando trato de matarlo, la consola de mi masilla se cierra.

así es como trato de encontrar el ID del proceso:

ps -ef |grep nohup 

este es el comando para matar

  kill -9 1787 787 

Cuando usa nohup y pone la tarea en segundo plano, el operador de fondo ( & ) le dará el PID en el símbolo del sistema. Si su plan es administrar manualmente el proceso, puede guardar ese PID y usarlo más adelante para matar el proceso si es necesario, mediante kill PID o kill -9 PID (si necesita forzar kill). Alternativamente, puede encontrar el PID más tarde por ps -ef | grep "command name" ps -ef | grep "command name" y localiza el PID desde allí. Tenga en cuenta que la palabra clave / comando nohup sí no aparece en la salida ps del comando en cuestión.

Si usaste un script, podrías hacer algo como:

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

Esto ejecutará my_command guardando todos los resultados en my.log (en un script, $! Representa el PID del último proceso ejecutado). El 2 es el descriptor de archivo para el error estándar ( stderr ) y 2>&1 le dice al shell que dirija la salida de error estándar a la salida estándar (descriptor de archivo 1 ). Requiere &1 para que el shell sepa que es un descriptor de archivo en ese contexto en lugar de solo un archivo llamado 1 . El 2>&1 es necesario para capturar cualquier mensaje de error que normalmente se escribe en el error estándar en nuestro archivo my.log (que proviene de la salida estándar). Consulte Redirección de E / S para obtener más información sobre el manejo de la redirección de E / S con el shell.

Si el comando envía resultados regularmente, puede verificar el resultado ocasionalmente con tail my.log , o si desea seguirlo “en vivo” puede usar tail -f my.log . Finalmente, si necesita matar el proceso, puede hacerlo a través de:

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

Estoy usando red hat linux en un servidor VPS (y a través de SSH – masilla), para mí lo siguiente funcionó:

Primero, enumera todos los procesos en ejecución:

 ps -ef 

Luego, en la primera columna, encontrará su nombre de usuario; Lo encontré las siguientes tres veces:

  • Una era la conexión SSH
  • El segundo era una conexión FTP
  • El último fue el proceso nohup

Luego, en la segunda columna, puede encontrar el PID del proceso nohup y solo debe escribir:

 kill PID 

(reemplazando el PID por el PID del proceso nohup, por supuesto)

¡Y eso es todo!

Espero que esta respuesta sea útil para alguien que también soy muy nuevo en bash y SSH, pero encontré el 95% del conocimiento que necesito aquí 🙂

supongo que estoy ejecutando script de ruby ​​en el fondo con el comando a continuación

 nohup ruby script.rb & 

entonces puedo obtener el proceso pid de fondo anterior especificando el nombre del comando. En mi caso, el comando es ruby.

 ps -ef | grep ruby 

salida

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

Ahora puedes matar fácilmente el proceso usando el comando kill

 kill 25938 

jobs -l debería darle el pid para la lista de procesos nohup. matarlos (-9) suavemente. 😉

Tu podrías intentar

 kill -9 `pgrep [command name]` 

Esto funciona en Ubuntu

Escriba esto para descubrir el PID

 ps aux | grep java 

Se mostrará todo el proceso de ejecución con respecto a Java

En mi caso es

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

Ahora matalo, kill -9 3315

El proceso zombie finalmente se detuvo.

Inicié el servidor django con el siguiente comando.

 nohup manage.py runserver  

Esto funciona en CentOS:

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

Supongamos que está ejecutando un progtwig Java con nohup, puede obtener el ID del proceso Java mediante

 `ps aux | grep java` 

salida

 xxxxx 9643 0.0 0.0 14232 968 pts/2 

entonces puedes matar el proceso tecleando

 sudo kill 9643 

o digamos que necesita matar a todos los procesos de Java, entonces solo use

 sudo killall java 

este comando mata a todos los procesadores java. puedes usar esto con el proceso. solo da el nombre del proceso al final del comando

 sudo killall {processName}