¿Qué es un proceso en segundo plano?

Aquí hay una definición común de un proceso en segundo plano:

«Un proceso en segundo plano es un programa que se ejecuta sin la intervención del usuario. A varios procesos en segundo plano se pueden ejecutar en un sistema operativo multitarea, como Linux, mientras el usuario interactúa con el proceso en primer plano.Algunos procesos en segundo plano, como los demonios, por ejemplo, nunca requieren la intervención del usuario. Otros están simplemente en segundo plano temporalmente mientras el usuario está ocupado con el programa que se está ejecutando actualmente en primer plano. De modo que otro proceso puede estar durmiendo y ocupando espacio de intercambio, hasta que se active, lo que lo convierte en un proceso en segundo plano «.

Dada esa definición, ¿No haría eso un proceso como apache2 un proceso en segundo plano ya que nunca interactúa con la entrada del usuario en la terminal? ¿Y no consideraría eso la mayoría de los procesos en segundo plano, ya que la mayoría de los procesos que se ejecutan en un sistema no tratan con la entrada del usuario en la terminal? Por extraño que parezca, personalmente no consideraría apache2 como un proceso en segundo plano, ya que un usuario interactúa con él a través de solicitudes http (pero no una terminal).

Comentarios

  • Creo que aquí hay dos definiciones. Una se refiere a la entrada del usuario (si un proceso puede aceptar la entrada del usuario, como la terminal). La otra es si un proceso está durmiendo y sentado en el espacio de intercambio o no. Aquí puede referirse a ambos como procesos en segundo plano, lo que hace que el término sea confuso

Respuesta

Un proceso en primer plano no requiere la interacción del usuario. Puede hacerlo

cp very_large_file destination 

y esto bloquearía su terminal hasta que finalice la copia y se consideraría un proceso en primer plano sin interacción del usuario. El punto aquí es si el proceso bloquea la ejecución de otros procesos hasta que finaliza.

Dos formas de hacerlo hacer un proceso de primer plano en uno de fondo:

1- Agregar un ampersand ( & ) al final de la línea de comandos:

cp very_large_file destination & 

2- Detener un proceso en primer plano y luego ponerlo en segundo plano:

cp very_large_file destination 

CTRL + Z

bg 

Ahora apache2 definitivamente contará como un proceso en segundo plano: sí, puede interactuar con él a través de solicitudes http, pero simplemente escucha en el puerto 80 (por defecto) esperando tal solicitud: no bloquea el sistema hasta que el usuario realiza una solicitud.

¿Y por qué le parece que la mayoría de los procesos se consideran procesos en segundo plano? De hecho, esto es normal en un «sistema operativo multitarea».

Comentarios

  • Por curiosidad, si tengo un programa que bloquea pero se está ejecutando en una sesión de pantalla GNU o tmux, y luego dejo esa sesión de pantalla / tmux y devuelvo el control a la terminal (pero, por supuesto, ignoran la señal HUP (colgar) para que aún se estén ejecutando), ¿se considerarían un fondo ¿proceso? Supongo que podría argumentar que son procesos en primer plano ya que dentro de su sesión, están bloqueando, aunque no están bloqueando en la terminal principal.
  • @JohnMerlino Yo diría que screen / tmux es el proceso de primer plano en este caso y cuando " devuelve el control a una terminal " lo envía a un segundo plano.

Respuesta

Hay dos definiciones comunes de «Proceso en segundo plano», uno en términos generales, y uno preciso y específico para Unix.

En un sentido amplio, puede llamar «proceso en segundo plano» a cualquier proceso que no esté interactuando con el usuario sentado en el consola. En este sentido, Apache es un proceso en segundo plano.

En terminología de Unix, «proceso en segundo plano» tiene una definición precisa. Un proceso en segundo plano es un proceso que se inicia desde una terminal pero que actualmente no puede interactuar con el ter minal. (Estoy simplificando al no considerar los grupos de procesos). Por lo general, obtiene un proceso en segundo plano iniciando un trabajo en segundo plano en un shell:

$ myprogram & [1] 12345 $ 

o iniciando un programa, luego suspenderlo y dejar que continúe en segundo plano:

$ myprogram ^Z [1]+ Stopped myprogram $ bg [1]+ myprogram & $ 

Si inicia un programa sin & , está en primer plano. Solo puede haber un único proceso en primer plano en una terminal determinada a la vez. (O más generalmente, un solo grupo de procesos, si el proceso de primer plano inicia algunos subprocesos). El shell incorporado bg y fg cambia qué proceso está en primer plano. Cuando un proceso está en segundo plano, si intenta leer o escribir en la terminal, es detenido por una señal SIGTTIN o SIGTTOUT .

Encuentro extraña tu intuición de que Apache no es un proceso en segundo plano porque interactúa con el usuario a través de HTTP. Apache no está interactuando con el usuario: está interactuando con un navegador web remoto (que está interactuando con el usuario) o un cliente automatizado (que no está interactuando con el usuario). Si considera cualquier proceso que interactúa con un interactivo como un proceso interactivo, entonces cualquier proceso es interactivo, lo que lo convierte en un concepto inútil.

La definición que cita combina procesos en segundo plano con procesos inactivos. No hay ninguna razón por la que un proceso en segundo plano esté inactivo o cambiado más que un proceso en primer plano. Un proceso en segundo plano puede estar haciendo un cálculo pesado, por ejemplo. Por el contrario, si el usuario se aleja de la consola y hay otros procesos activos, los procesos de primer plano pueden intercambiarse.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *