Un proceso en segundo plano es un proceso informático que se ejecuta en segundo plano y sin intervención del usuario. [1] Las tareas típicas de estos procesos incluyen el registro, la supervisión del sistema, la programación [2] y la notificación al usuario. [3]
En un sistema Windows , un proceso en segundo plano es un programa informático que no crea una interfaz de usuario o un servicio de Windows . Los primeros se inician como cualquier otro programa, por ejemplo, a través del menú Inicio . Los servicios de Windows, por otro lado, se inician mediante el Administrador de control de servicios . En Windows Vista y versiones posteriores, se ejecutan en una sesión independiente . [ cita requerida ]
En un sistema Unix o similar a Unix , un proceso o trabajo en segundo plano puede identificarse además como uno cuyo ID de grupo de procesos difiere de su ID de grupo de terminal (TGID). (El TGID de un proceso es el ID de proceso del líder del grupo de procesos que abrió la terminal, que normalmente es el shell de inicio de sesión. El TGID identifica la terminal de control del grupo de procesos). Este tipo de proceso no puede recibir señales del teclado de su terminal principal y normalmente no enviará salida a esa terminal. [4] Esta definición más técnica no distingue entre si el proceso puede recibir o no la intervención del usuario. Aunque los procesos en segundo plano se utilizan normalmente para fines que necesitan pocos recursos, cualquier proceso puede ejecutarse en segundo plano y dicho proceso se comportará como cualquier otro proceso, con las excepciones indicadas anteriormente. [1]
En la familia de sistemas operativos Windows NT , un servicio de Windows es un proceso en segundo plano dedicado. [5] Un servicio de Windows debe cumplir con las reglas de interfaz y los protocolos del Administrador de control de servicios , el componente responsable de administrar los servicios de Windows. [6]
Los servicios de Windows se pueden configurar para que se inicien cuando se inicia el sistema operativo y para que se ejecuten en segundo plano mientras Windows esté en ejecución. Alternativamente, se pueden iniciar manualmente o mediante un evento. Los sistemas operativos Windows NT incluyen numerosos servicios que se ejecutan en el contexto de tres cuentas de usuario : System
, Network Service
y Local Service
. Estos componentes de Windows suelen estar asociados con el proceso host para servicios de Windows: svchost.exe . Dado que los servicios de Windows funcionan en el contexto de sus propias cuentas de usuario dedicadas, pueden funcionar cuando un usuario no ha iniciado sesión.
Antes de Windows Vista , los servicios instalados como "servicios interactivos" podían interactuar con el escritorio de Windows y mostrar una interfaz gráfica de usuario . Sin embargo, con Windows Vista, los servicios interactivos quedaron obsoletos y dejaron de funcionar correctamente, como resultado del endurecimiento de servicios de Windows . [7] [8]
Los tres medios principales para administrar los servicios de Windows son:
sc.exe
Un daemon es un tipo de proceso en segundo plano diseñado para ejecutarse continuamente en segundo plano, esperando que ocurran eventos o se cumplan condiciones. [9] Cuando se inician con la función daemon , los daemons se disocian de su terminal principal. [10]
Desde una línea de comandos de Unix, se puede iniciar un proceso en segundo plano utilizando el operador "&". El comando bg puede reanudar un trabajo suspendido (enviando SIGCONT ), ejecutándolo en segundo plano. El uso del comando fg también reconectará la entrada estándar a su terminal principal, llevándola al primer plano. El comando jobs enumerará todos los procesos asociados con el terminal actual y se puede utilizar para traer procesos en segundo plano al primer plano. [4] [11]
Cuando una sesión de inicio de sesión finaliza, mediante un cierre de sesión explícito o una desconexión de la red, todos los procesos, incluidos los procesos en segundo plano, se terminarán de forma predeterminada para evitar que se conviertan en procesos huérfanos . Concretamente, cuando el usuario sale del proceso de shell de lanzamiento, como parte del apagado envía una señal de suspensión ( SIGHUP ) a todos sus trabajos , para terminar todos los procesos en el grupo de procesos correspondiente . Para que los procesos sigan ejecutándose, se puede no finalizar la sesión o finalizar la sesión sin terminar los procesos. Se puede utilizar un multiplexor de terminal para dejar una sesión en ejecución pero separar una terminal virtual de ella, dejando los procesos ejecutándose como procesos secundarios de la sesión; el usuario puede volver a adjuntar la sesión más tarde. O bien, se puede evitar la terminación iniciando el proceso mediante el comando nohup (que le indica al proceso que ignore SIGHUP) o ejecutándolo posteriormente disown
con el id de trabajo, lo que elimina el trabajo de la lista de trabajos por completo o simplemente evita que se envíe SIGHUP. En este último caso cuando la sesión termina, los procesos hijos no son terminados, ya sea porque no se les envía SIGHUP o porque lo ignoran, y por lo tanto se convierten en procesos huérfanos, que luego son adoptados por el proceso init (el núcleo establece el proceso init como su padre), y continúan ejecutándose sin sesión, ahora llamados daemons .
En este ejemplo, que se ejecuta en Unix , la utilidad sleep se ejecutó en segundo plano. Luego, la herramienta ps se ejecutó en primer plano, donde generó el texto que se muestra a continuación. Ambos se ejecutaron desde el shell. [12]
COMANDO DE TIEMPO PID TT STAT 54659 10 S 0 :00.06 su ( zsh ) 54703 10 IN 0 :00.00 - sleep 1000 54852 10 R+ 0 :00.00 - ps -U botty -axd
Muchas versiones más nuevas de los sistemas operativos de teléfonos inteligentes y PDA ahora incluyen la capacidad de iniciar procesos en segundo plano. Debido a los límites de hardware, los procesos en segundo plano en los sistemas operativos móviles a menudo están restringidos a ciertas tareas o niveles de consumo. En Android , el uso de CPU para procesos en segundo plano puede estar limitado al 5-10%. [13] Las aplicaciones en iOS de Apple están limitadas a un subconjunto de funciones mientras se ejecutan en segundo plano. [3] Tanto en iOS como en Android, el sistema puede eliminar los procesos en segundo plano si están utilizando demasiada memoria. [3] [13]
El servicio CmdAsSystem está configurado como interactivo y su compatibilidad está en desuso. Es posible que el servicio no funcione correctamente. El problema es que este script intenta crear e iniciar un servicio interactivo. Los servicios interactivos no funcionarán correctamente debido al aislamiento de la sesión 0 en Windows Vista.