¿Cuál es la diferencia entre un trabajo y un proceso?

Respuestas:

46

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.

Shawn J. Goff
fuente
En el ejemplo anterior, cuando tenemos 2 trabajos en ejecución , también tenemos 2 procesos en ejecución , ¿no es así? ¿Podría elaborar el significado de su propio espacio de direcciones ? ¿En qué caso un programa no tiene su propio espacio de direcciones?
Kenny
@ Kenny sí, esos trabajos tro también serían procesos. De hecho, cada trabajo es un proceso. Un trabajo está relacionado con tu sesión de ella. Cada proceso que comience que no se separe de su tty es un trabajo.
Shawn J. Goff
@Kenny, en cuanto a procesos, cuando digo programa, es algo muy general: un conjunto de instrucciones ordenadas para que la CPU las lleve a cabo. Esto también se llama una tarea o un hilo de ejecución. Un proceso puede crear otro hilo que comparte su espacio de direcciones.
Shawn J. Goff
1
Los comandos canalizados como in ls | sortes 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?
Tim
30

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 | heades 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 SIGTTINy SIGTTOUseñ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 SIGTTOUpara que un trabajo en segundo plano pueda escribir en el terminal sin interrupciones.

efímero
fuente
1
Este es un resumen bueno y conciso de la gestión de procesos de shell y terminal. Podría mejorarse mencionando que un "trabajo" es una "tubería", que puede ser más de un proceso conectado en un grupo de procesos.
Chris Page
1

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.

Fuente

buenos ejemplos

Premraj
fuente
-1

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.

eloone
fuente
1
Por favor explique los votos abajo si quiere votar abajo. Si esta respuesta no es correcta, al menos explique por qué cree que no es correcta. Hasta ahora sigo pensando que mi respuesta tiene sentido, es el tipo de explicación que estaba buscando.
eloone
Estoy de acuerdo en que quien votó en contra debería haber explicado por qué. Pero creo que la razón del voto negativo es que su definición de "trabajo" simplemente no es correcta.
prograde el
¿Te importaría explicar por qué no es correcto? "Trabajo" no está claramente definido como lo que es un "proceso" (con PID en el sistema). En mi experiencia, "trabajo" siempre fue una palabra utilizada para definir un cierto tipo de proceso que a menudo se programaba, y en segundo plano, y que se puede iniciar. Por eso es difícil de definir porque el uso lo define. También podría ser un grupo de procesos, pero también lo es un "contenedor" (LXC), pero un "contenedor" no es un "trabajo". Un proceso lanzado como "nginx" tampoco es un "trabajo". Mi comentario todavía agrega algo a la respuesta. Nuevamente, responde lo que estaba tratando de entender.
eloone
También sigo buscando una definición adecuada, así que lo siento, no puedo responder (todavía). Pero lo que no es correcto, es que tendría que ser programado.
prograde el