¿Cuál es la diferencia entre un "trabajo" y un "proceso"?
¿Cuál es la diferencia entre un "trabajo" y un "proceso"?
Respuestas:
Un proceso es cualquier programa en ejecución con su propio espacio de direcciones.
Un trabajo es un concepto utilizado por el shell: cualquier programa que inicies interactivamente que no se separe (es decir, que no sea un demonio) es un trabajo. Si está ejecutando un programa interactivo, puede presionar CtrlZpara suspenderlo. Luego puede iniciarlo nuevamente en primer plano (usando fg
) o en segundo plano (usando bg
).
Mientras el programa está suspendido o ejecutándose en segundo plano, puede iniciar otro programa; luego tendría dos trabajos ejecutándose. También puede iniciar un programa en ejecución en segundo plano añadiendo una "Y" de esta manera: program &
. Ese programa se convertiría en un trabajo de fondo. Para enumerar todos los trabajos que está ejecutando, puede usarlos jobs
.
Para obtener más información sobre trabajos, consulte esta sección de la página de manual de bash.
ls | sort
es un trabajo, pero cada comando se ejecuta como un proceso secundario de un proceso de subshell diferente. Este es un ejemplo de un trabajo que consta de múltiples procesos. ¿Cómo puede su definición de trabajo explicar que un trabajo puede consistir en múltiples procesos?
UNIX tiene conceptos separados "proceso", "grupo de procesos" y "sesión".
Cada shell que obtiene al iniciar sesión se convierte en el líder de su propia nueva sesión y grupo de procesos, y establece el grupo de proceso de control del terminal en sí mismo.
El shell crea un grupo de procesos dentro de la sesión actual para cada "trabajo" que inicia, y coloca cada proceso que comienza en el grupo de procesos apropiado. Por ejemplo, ls | head
es una tubería de dos procesos, que el shell considera un solo trabajo, y pertenecerá a un único y nuevo grupo de procesos.
Un proceso es un (conjunto de) subproceso de ejecución y otro contexto, como el espacio de direcciones y la tabla de descriptores de archivos. Un proceso puede iniciar otros procesos; estos nuevos procesos pertenecerán al mismo grupo de procesos que el padre a menos que se tomen otras medidas. Cada proceso también puede tener un "terminal de control", que comienza igual que su padre.
El shell tiene el concepto de trabajos "en primer plano" y trabajos "en segundo plano". Los trabajos en primer plano son grupos de procesos con control del terminal, y los trabajos en segundo plano son grupos de procesos sin control del terminal.
Cada terminal tiene un grupo de procesos en primer plano. Al llevar un trabajo al primer plano, el shell lo establece como el grupo de proceso en primer plano del terminal; al poner un trabajo en segundo plano, el shell establece el grupo de procesos en primer plano del terminal en otro grupo de procesos o en sí mismo.
Los procesos pueden leer y escribir en su terminal de control si están en el grupo de procesos en primer plano. De lo contrario, reciben SIGTTIN
y SIGTTOU
señalan los intentos de leer y escribir en el terminal, respectivamente. Por defecto, estas señales suspenden el proceso, aunque la mayoría de los shells se enmascaran SIGTTOU
para que un trabajo en segundo plano pueda escribir en el terminal sin interrupciones.
En informática, un trabajo es una unidad de trabajo o unidad de ejecución (que realiza dicho trabajo). Un componente de un trabajo (como unidad de trabajo) se denomina tarea o paso (si es secuencial, como en una secuencia de trabajos). Como unidad de ejecución, un trabajo puede identificarse concretamente con un solo proceso, que a su vez puede tener subprocesos (procesos hijos; el proceso correspondiente al trabajo es el proceso padre) que realiza las tareas o pasos que comprenden el trabajo del trabajo; o con un grupo de proceso; o con una referencia abstracta a un proceso o grupo de procesos, como en el control de trabajo de Unix.
Las definiciones anteriores son muy técnicas, pero tal vez el operador quería una aclaración más diaria. Creo que un trabajo es un proceso programado. Cuando tratamos con procesos en general, no existe necesariamente la noción de horario, pero cuando usamos la palabra "trabajo" siempre queremos decir que está programado, o es repetitivo como un ciclo, es como un trabajador.