¿Qué debo hacer cuando recibo el error 'Hay trabajos detenidos'?

64

Me enfrento a este tipo de situación muchas veces.

Por ejemplo, cada vez que intento abrir algún archivo emacscon sudoderechos usando:

sudo emacs tet.c &

En lugar de pedirme la contraseña, Ubuntu simplemente inicia el emacsproceso sin ninguna emacsventana o salida en el terminal (excepto el pid), vea la imagen (si no uso '&', me pedirá la contraseña):

ingrese la descripción de la imagen aquí

Tengo dos preguntas relacionadas con esto:

  1. ¿Qué debo hacer cuando recibo el error "Hay trabajos detenidos"? ¿Cómo identifico todos esos trabajos detenidos y los mato? Una vez que borre la terminal, no tendré imágenes de estos procesos detenidos.

  2. ¿Por qué Ubuntu / emacs se comporta así? ¿Por qué no me pide la contraseña?

Puntero nulo
fuente

Respuestas:

79

There are stopped jobsEl mensaje está lejos, muy lejos de ser un error. Es solo una notificación que le indica que intenta salir del shell, pero tiene uno o más trabajos / programas suspendidos (en su caso, emacsque puso en segundo plano usando &al final de su comando). El sistema no le permite salir del shell y eliminar los trabajos a menos que lo desee. Puedes hacer un par de cosas en respuesta a este mensaje:

  • use el jobscomando para decirle qué trabajo (s) ha suspendido
  • puede elegir agregar los trabajos en primer plano con el fgcomando
  • si no le importa si los trabajos terminarán, puede escribir de exitnuevo; escribir exituna segunda vez con o sin un jobscomando intermedio dará como resultado la finalización de todos los trabajos suspendidos.

Para responder a la segunda pregunta, te diré que no Ubuntu o emacs se comportan así. Este es un comportamiento normal cuando coloca una aplicación para que se ejecute en segundo plano. En este caso, sudose solicita la contraseña, pero se solicita en segundo plano, por lo que no puede ver este hecho. Para verlo, debe recuperar el trabajo en primer plano con el fgcomando:

radu@Radu: ~ $ sudo emacs tet.c &
[1] 7732
radu@Radu: ~ $ # now sudo emacs run in background so you can't see nothing about what's happening
radu@Radu: ~ $ fg
[sudo] password for radu:

Después de esto, puede escribir Ctrl+ Zpara volver a poner el trabajo en segundo plano si lo desea. Luego puede ejecutar nuevamente el comando 'fg' para recuperar el trabajo en primer plano y así sucesivamente.

Radu Rădeanu
fuente
Para mí, siempre es telnet. Me olvido de quit:) (ver superuser.com/questions/486496/how-do-i-exit-telnet )
cmroanirgo
1
Entonces, simplemente presioné Ctrl + d dos veces (!) Y recibí el mismo mensaje después del primero. ¿Hay alguna forma de averiguar cuál fue el trabajo que acabo de matar?
Matsmath
20

Recibió el mensaje, porque el sistema le advierte sobre los trabajos activos asociados con su shell actual.

Se pueden listar estos Correr / detuvieron mediante la ejecución de los trabajos: jobs,

Entonces puede hacer uno de los siguientes:

  • mover el último trabajo al primer plano: fg(opuesto a bgpara el fondo),
  • ejecutar disownpara eliminar estos trabajos de su shell actual sin matarlos,
  • forzar el cierre de sesión eliminando estas tareas presionando Ctrl+Ddos veces, igual que escribir exit/ logoutdos veces,
  • elimine estos trabajos manualmente ejecutando: kill $(jobs -p)(agregar -9para forzar)
  • si los rechaza y aún desea eliminar todos los procesos detenidos, intente:

    kill $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')


Para responder una pregunta sudo, no le pedirá la contraseña, ya que requiere tener un terminal activo para recibir la contraseña desde la entrada estándar , y al ejecutarla en segundo plano, el shell no espera a que termine el comando , por lo que no tiene posibilidad de interactuar con el comando.

En este caso, tienes 3 posibilidades:

  • ejecutar el comando sin entrar en segundo plano ( &),
  • lea la contraseña de la entrada estándar en lugar del dispositivo terminal, sudo -Sp. ej.

    echo mypass | sudo emacs tet.c
    
  • configure sudo para que no solicite la contraseña: visudocomando y sudoersarchivo de edición . Ver: Habilitar NOPASSWDpara usuario

kenorb
fuente
6

Cuando te encuentras hay un error de trabajos detenidos :

  1. escriba jobs-> verá los trabajos con estado detenido
  2. y luego escribe exit-> puedes salir de la terminal
santhosh kumar
fuente