Estoy ejecutando un proceso nohup en el servidor. Cuando trato de matarlo, mi consola de masilla se cierra en su lugar.
así es como trato de encontrar la ID del proceso:
ps -ef |grep nohup
este es el comando para matar
kill -9 1787 787
Estoy ejecutando un proceso nohup en el servidor. Cuando trato de matarlo, mi consola de masilla se cierra en su lugar.
así es como trato de encontrar la ID del proceso:
ps -ef |grep nohup
este es el comando para matar
kill -9 1787 787
Respuestas:
Al usar nohup
y poner 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 matar el proceso si es necesario, a través de kill PID
o kill -9 PID
(si necesita forzar la muerte). Alternativamente, puede encontrar el PID más adelante ps -ef | grep "command name"
y ubicar el PID desde allí. Tenga en cuenta que la nohup
palabra clave / comando en sí no aparece en la ps
salida 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 se ejecutará my_command
guardando toda la salida 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 enrute la salida de error estándar a la salida estándar (descriptor de archivo 1
). Se requiere &1
para que el shell sepa que es un descriptor de archivo en ese contexto en lugar de solo un archivo llamado 1
. Se 2>&1
necesita para capturar cualquier mensaje de error que normalmente se escribe en un 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 el manejo de la redirección de E / S con el shell.
Si el comando envía resultados de manera regular, puede verificar el resultado ocasionalmente con tail my.log
, o si desea seguirlo "en vivo", puede usarlo 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
nohup
per se, que imprime el PID, es el final &
que lo ls &
ls
2
es el descriptor de archivo de "error estándar". >
es la redirección de shell y &1
es el descriptor de archivo de "salida estándar" ( &
aquí se necesita para que el shell no piense que me estoy refiriendo a un archivo llamado 1
). Entonces 2 > &1
redirige cualquier salida de error estándar a la entrada estándar. Dado que los > my.log
medios anteriores para redirigir la salida estándar my.log
, necesitamos una manera de asegurarnos de que los mensajes de error también se envíen my.log
. 2 > &1
asegura que tales errores pasen a la salida estándar, que a su vez va a my.log
. Ver E / S redirección .
echo $!
me da el pid de nohup en lugar del proceso generado: paste.fedoraproject.org/428697/99695314
&
actúa como un delimitador de comandos lo que podría intentar, sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
. Puede funcionar, pero no lo he probado.
Estoy usando Red Hat Linux en un servidor VPS (y a través de SSH - masilla), para mí funcionó lo siguiente:
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:
Luego, en la segunda columna, puede encontrar el PID del proceso de nohup y solo escribe:
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 que también soy muy nuevo en bash y SSH, pero encontré el 95% del conocimiento que necesito aquí :)
Supongamos que estoy ejecutando Ruby Script en segundo plano con el siguiente comando
nohup ruby script.rb &
entonces puedo obtener el pid del proceso de fondo anterior especificando el nombre del comando. En mi caso el comando es rubí.
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
ps -ef
y kill
ambos estaban bien cubiertos arriba, entonces, ¿cuál es la parte nueva?
jobs -l debería darte el pid para la lista de procesos nohup. mátalos (-9) suavemente. ;)
kill -9
menos que sepa que las señales regulares no funcionan.
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 mátalo kill -9 3315
El proceso zombie finalmente se detuvo.
Supongamos que está ejecutando un programa java con nohup, puede obtener la identificación del proceso java al
`ps aux | grep java`
salida
xxxxx 9643 0.0 0.0 14232 968 pts/2
entonces puedes matar el proceso escribiendo
sudo kill 9643
o digamos que necesita matar todos los procesos de Java y luego simplemente usar
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}
Inicié el servidor django con el siguiente comando.
nohup manage.py runserver <localhost:port>
Esto funciona en CentOS:
:~ ns$netstat -ntlp
:~ ns$kill -9 PID
process not found
confusión con nohup.
Hoy me encontré con el mismo problema. Y como fue hace mucho tiempo, olvidé por completo qué comando usé y cuándo. Probé tres métodos:
ps -ef
comando. Esto muestra el momento en que comienza su proceso, y es muy probable que no comience a ordenar justo antes de cerrar ssh (depende de usted). Desafortunadamente, no creo que el último comando sea el comando que ejecuto usando nohup, por lo que esto no funciona para mí.ps -ef
comando. Significa ID de proceso principal, la ID del proceso que crea el proceso. El ppid es 1 en ubuntu para el proceso que usa nohup para ejecutarse. Entonces puedes usarps --ppid "1"
para obtener la lista y verificar HORA (el tiempo total de CPU que usa su proceso) o CMD para encontrar el PID del proceso.lsof -i:port
si el proceso ocupa algunos puertos, y obtendrá el comando. Luego, al igual que la respuesta anterior, use ps -ef | grep command
y obtendrá el PID.Una vez que encuentre el PID del proceso, puede usarlo kill pid
para finalizar el proceso.
nohup
y usarlo más tarde para elkill
, o encontrar el proceso por su nombre de comando en laps -ef
salida y obtener el PID de eso. Tienes que buscar el nombre del comando, nonohup
.