Recibo el mensaje There are stopped jobs.
cuando intento salir de un shell bash a veces. Aquí hay un escenario reproducible en python 2.x:
- ctrl+ ces manejado por el intérprete como una excepción.
- ctrl+ z'detiene' el proceso.
- ctrl+ dsale de Python para reales.
Aquí hay una salida de terminal del mundo real:
example_user@example_server:~$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
ctrl+z
[1]+ Stopped python
example_user@example_server:~$ exit
logout
There are stopped jobs.
Bash no salió, debo exit
volver a salir del bash shell.
- P: ¿Qué es un 'trabajo detenido' o qué significa esto?
- P: ¿Se puede reanudar un proceso detenido?
- P: ¿El primero
exit
mata los trabajos detenidos? - P: ¿Hay alguna forma de salir del shell la primera vez? (sin entrar
exit
dos veces)
Respuestas:
Un trabajo detenido es aquel que se ha colocado temporalmente en segundo plano y ya no se está ejecutando, pero aún está utilizando recursos (es decir, memoria del sistema). Debido a que ese trabajo no está conectado al terminal actual, no puede producir resultados y no recibe entradas del usuario.
Puede ver los trabajos que está ejecutando utilizando el
jobs
comando incorporado en bash, probablemente también otros shells. Ejemplo:Puede reanudar un trabajo detenido utilizando el
fg
comando incorporado bash (primer plano). Si tiene varios comandos que se han detenido, debe especificar cuál reanudar pasando el número de especificación de trabajos en la línea de comando confg
. Si solo se detiene un programa, puede usarfg
solo:En este punto, vuelve al intérprete de Python y puede salir utilizando control-D.
Por el contrario, puede
kill
ejecutar el comando con su especificación de trabajo o PID. Por ejemplo:Para usar la especificación de trabajo, preceda el número con la tecla de porcentaje (%):
Si emite un comando de salida con trabajos detenidos, se mostrará la advertencia que vio. Los trabajos se dejarán en ejecución por seguridad. Eso es para asegurarse de que está consciente de que está intentando matar trabajos que podría haber olvidado que detuvo. La segunda vez que utiliza el comando de salida, los trabajos finalizan y el shell sale. Esto puede causar problemas para algunos programas que no están destinados a ser eliminados de esta manera.
En bash parece que puedes usar el
logout
comando que matará los procesos detenidos y saldrá. Esto puede causar resultados no deseados.También tenga en cuenta que algunos programas pueden no salir cuando se terminan de esta manera, y su sistema podría terminar con una gran cantidad de procesos huérfanos utilizando recursos si tiene la costumbre de hacerlo.
Tenga en cuenta que puede crear un proceso en segundo plano que se detendrá si requieren la entrada del usuario:
Puede reanudar y eliminar estos trabajos de la misma manera que realizó los trabajos que detuvo con la
Ctrl-z
interrupción.fuente
El trabajo detenido significa el proceso que recibió la señal de detención (
SIGSTOP
/SIGTSTP
) del teclado (carácter de suspensión Ctrl-Z), comando (por ejemplokill -STOP [PID]
) u otro proceso (por ejemplo, el núcleo cuando el sistema no tiene recursos) y está en estado de pausa, por lo que le dice al sistema que detenga / suspenda un proceso para que no realice ninguna ejecución / procesamiento.Empleos de concha activos se pueden enumerar por:
jobs
.El proceso detenido solo reanudará su ejecución si se le envía la
SIGCONT
señal. Esto se puede lograr mediantefg
(ofg ID
) que moverá el trabajo al primer plano convirtiéndolo en el trabajo actual,bg
para continuarlo en segundo plano o enviando unaSIGCONT
señal (por ejemplokill -CONT [PID]
).La primera vez que escribe
exit
/logout
o presiona Ctrl-D, el shell imprime un mensaje de advertencia sobre los trabajos activos actuales que están asociados con su terminal, por lo tanto, no matará a aquellos sin su permiso al confirmar la acción por segunda vez. Si lacheckjobs
opción está habilitada (shopt -s checkjobs
), también puede enumerar los trabajos con sus estados.Puede presionar Ctrl+Ddos veces o mantenerlo presionado durante más tiempo, esto saldrá de la carcasa en silencio rápidamente y matará los trabajos actuales de parada / ejecución de shel.
Alternativamente repudiarlos (
disown
) para salir o matarlos de forma manual:kill $(jobs -p)
.fuente