Usuario del software
2012-09-13 12:51:29 +0000 2012-09-13 12:51:29 +0000
88

¿Cuál es el efecto de CTRL + Z en una aplicación de unixLinux?

Tenía curiosidad y confusión por saber cuál es exactamente el comportamiento de CTRl+Z.

Sé que si un proceso se ejecuta en primer plano, y presionamos ctrl+z, pasa a segundo plano.

Pero qué pasa exactamente.

¿Sigue haciendo su trabajo, o se suspende, y se detiene en el punto donde estaba.

Y si se detiene en ese punto, y cuál es el significado de trabajo en segundo plano.

Respuestas [4]

74
2012-09-13 12:57:13 +0000

Un "trabajo en segundo plano" es simplemente uno que no interactúa con el usuario -- no controla la tty y sólo hace lo suyo (generalmente en silencio). Un trabajo en primer plano es lo contrario, mantiene el control de la tty para interactuar con el usuario.

Control-Z suspende el proceso en primer plano más reciente (el último proceso en interactuar con la tty) (a menos que ese proceso tome medidas para ignorar la suspensión, como hacen normalmente los shells). Esto generalmente lo llevará de vuelta a su shell, desde el cual generalmente puede ingresar el comando bg para mover el proceso recién suspendido al fondo (dejando que continúe ejecutándose) o fg para traerlo de vuelta al primer plano.

74
58
2012-09-13 12:57:09 +0000

Pulsar Ctrl+Z envía la señal TSTP a su proceso. Esto detiene la ejecución (el kernel no programará más tiempo de CPU al proceso) y el proceso queda a la espera de un CONT para continuar el procesamiento.

Puede emular/replicar esto a través de kill -TSTP y kill -CONT (¡ya que kill enviará una señal nominada a su proceso, a pesar del nombre! El proceso en sí no tiene realmente el concepto de 'background' o 'foreground'.

Ver aquí para más información.

58
15
2012-09-13 13:02:52 +0000

Considere este comando, que tarda aproximadamente 4,5 segundos en mi portátil:

echo 2^10000000 | bc -lq | wc -c

Al pulsar Ctrl+Z, el cálculo se suspende. Tienes la opción de reanudar el cálculo en primer plano usando fg, o reanudarlo en segundo plano usando bg. Esto último es más o menos equivalente a ejecutar

echo 2^10000000 | bc -lq | wc -c &
15