trabajos -l debería darle el pid para la lista de procesos nohup. mátelos (-9) suavemente.;)
Estoy usando red hat linux en un servidor VPS (ya través de SSH - masilla), para mí funcionó lo siguiente:
Primero, lista todos los procesos en ejecución:
ps -ef
Luego, en la primera columna, encuentra su nombre de usuario; Lo encontré las siguientes tres veces:
- Uno fue la conexión SSH
- La segunda fue una conexión FTP
- El último fue el proceso nohup
Luego en la segunda columna puedes encontrar el PID del proceso nohup y solo escribes:
kill PID
(reemplazando el PID con el PID del proceso nohup, por supuesto)
¡Y eso es todo!
Espero que esta respuesta sea útil para alguien. También soy muy nuevo en bash y SSH, pero encontré el 95 % del conocimiento que necesito aquí :)
supongamos que estoy ejecutando un script Ruby en segundo plano con el siguiente comando
nohup ruby script.rb &
entonces puedo obtener el pid del proceso en segundo plano 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 puede eliminar fácilmente el proceso usando el comando de eliminación
kill 25938
Al usar nohup
y pones 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 tarde para eliminar el proceso si es necesario, a través de kill PID
o kill -9 PID
(si necesitas forzar la muerte). Alternativamente, puede encontrar el PID más adelante por ps -ef | grep "command name"
y localice el PID desde allí. Tenga en cuenta que nohup
palabra clave/comando en sí no aparece en el ps
salida para el comando en cuestión.
Si usa un script, podría hacer algo como esto en el script:
nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt
Esto ejecutará my_command
guardando toda la salida en my.log
(en un guión, $!
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 enrute 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 como error estándar en nuestro my.log
archivo (que proviene de la salida estándar). Consulte Redirección de E/S para obtener más detalles sobre cómo manejar la redirección de E/S con el shell.
Si el comando envía resultados de forma regular, puede verificar el resultado de vez en cuando con tail my.log
, o si quieres seguirlo "en vivo" puedes usar tail -f my.log
. Finalmente, si necesita finalizar el proceso, puede hacerlo a través de:
kill -9 `cat save_pid.txt`
rm save_pid.txt