2011-11-04 83 views
27

que ejecuta el siguiente comando¿Cómo matar un proceso nohup?

$ nohup ./tests.run.pl 0 & 

ahora cuando intento de acabar con él (y las ejecuciones que se inician desde este script) usando

$ kill -0 <process_id> 

no funciona. ¿Cómo puedo eliminar un proceso no creado y los procesos que se ejecutan a través del script nohupped?

Gracias

Respuesta

37

kill -0 hace no matar el proceso. Solo verifica si puedes enviarle una señal.

Simplemente kill pid, y si eso no funciona, intente kill -9 pid.

+0

funcionó mucho gracias. – polerto

+1

@Mat, ¿Necesito obtener primero la identificación del proceso? ¿Qué pasa si ejecuto múltiples procesos y deseo matarlos a todos a la vez? Hice computación paralela usando múltiples núcleos, entonces hay, digamos 10 procesos invocados por "nohup". Deseo matarlos a todos. ¿Podrías por favor instruirme aquí? Gracias. –

+0

he matado un proceso nohup con kill -9, pero aun así cuando ejecuto el comando tail f nohup.out estoy recibiendo registros continuamente ... esto significa que mi proceso se está ejecutando ... ¿qué hacer? –

25

Simplemente kill <pid> que enviará un SIGTERM, que nohup no ignorará.

No debe enviar primero un SIGKILL, ya que eso no da oportunidad al proceso de recuperación; usted debe tratar los siguientes, en orden:

  • SIGTERM (15)
  • SIGINT (2)
  • SIGKILL (9)
+2

Absolutamente cierto. Un SIGKILL (kill -9) no puede ser capturado por los manejadores de señal de un proceso. Esto significa que no puede escribir ningún código epilog para eliminar archivos temporales y/o separar los segmentos de memoria compartida asignados. Si no se limpia la memoria compartida, menos memoria general estará disponible para los nuevos procesos, algo desagradable. – JRFerguson

2

Si no conoce los identificadores de proceso y puede ejecutar varios comandos dentro de un shell (o un bucle), puede ejecutar jobs -l para enumerar trabajos y PID, luego kill.

Ver ejemplo:

[email protected]:/usr/share/etlservice/bin$ jobs -l 
[1] 27398 Running     nohup ./extract_assessor_01.sh > job1.log & 
[2] 27474 Running     nohup ./extract_assessor_02.sh > job2.log & 
[3] 27478 Running     nohup ./extract_assessor_03.sh > job3.log & 
[4]- 27481 Running     nohup ./extract_assessor_04.sh > job4.log & 
[5]+ 28664 Running     nohup ./extract_assessor_01.sh > job1.log & 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27398 
sudo kill 27474[1] Terminated    nohup ./extract_assessor_01.sh > job1.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27474 
[2] Terminated    nohup ./extract_assessor_02.sh > job2.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27478 
[3] Terminated    nohup ./extract_assessor_03.sh > job3.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 27481 
[4]- Terminated    nohup ./extract_assessor_04.sh > job4.log 
[email protected]:/usr/share/etlservice/bin$ sudo kill 28664 
[5]+ Terminated    nohup ./extract_assessor_01.sh > job1.log 
[email protected]:/usr/share/etlservice/bin$ 
3

Me gustaría hacer algo como:

jobs 

[1] + Running nohup ./tests.run.pl 

kill %1 
0

matan nohup proceso

ps aux |grep nohup 

grep que PID kill -15 -1 16000 (será cerrar la sesión usted) y limpiar el siguiente inicio de sesión raíz

Cuestiones relacionadas