Qual è la differenza tra un lavoro e un processo?


Risposte:


46

Un processo è qualsiasi programma in esecuzione con il proprio spazio di indirizzi.

Un lavoro è un concetto usato dalla shell - qualsiasi programma che si avvia in modo interattivo che non si stacca (cioè, non un demone) è un lavoro. Se stai eseguendo un programma interattivo, puoi premere CtrlZper sospenderlo. Quindi puoi riavviarlo in primo piano (usando fg) o in background (usando bg).

Mentre il programma è sospeso o in esecuzione in background, è possibile avviare un altro programma: si avrebbero quindi due lavori in esecuzione. È inoltre possibile avviare un programma in esecuzione in background aggiungendo una "&" come questo: program &. Quel programma sarebbe diventato un lavoro in background. Per elencare tutti i lavori in esecuzione, è possibile utilizzare jobs.

Per ulteriori informazioni sui lavori, consultare questa sezione della pagina man di bash.


Nell'esempio sopra, quando abbiamo 2 lavori in corso abbiamo anche 2 processi in esecuzione , no? Potresti elaborare il significato del suo spazio degli indirizzi ? In tal caso un programma non ha un proprio spazio di indirizzi?
Kenny,

@Kenny sì, anche quei lavori tro sarebbero processi. In effetti, ogni lavoro è un processo. Un lavoro è legato alla tua sessione. Ogni processo che si avvia e che non si distacca dal proprio tty è un lavoro.
Shawn J. Goff,

@Kenny, per quanto riguarda i processi, quando dico programma, è una cosa molto generale: un insieme di istruzioni ordinate che la CPU deve eseguire. Questo è anche chiamato un'attività o un thread di esecuzione. Un processo può creare un altro thread che condivide il suo spazio di indirizzi.
Shawn J. Goff,

1
comandi piped come in ls | sortè un lavoro, ma ogni comando viene eseguito come processo figlio di un diverso processo subshell. Questo è un esempio di lavoro costituito da più processi. In che modo la tua definizione di lavoro può spiegare che un lavoro può essere costituito da più processi?
Tim

30

UNIX ha concetti separati "processo", "gruppo di processo" e "sessione".

Ogni shell che si ottiene al momento dell'accesso diventa il leader della propria nuova sessione e gruppo di processi e imposta il gruppo di processi di controllo del terminale su se stesso.

La shell crea un gruppo di processi all'interno della sessione corrente per ogni "lavoro" che avvia e colloca ciascun processo che avvia nel gruppo di processi appropriato. Ad esempio, ls | headè una pipeline di due processi, che la shell considera un singolo lavoro e apparterrà a un singolo nuovo gruppo di processi.

Un processo è un (insieme di) thread di esecuzione e altri contesti, come lo spazio degli indirizzi e la tabella dei descrittori di file. Un processo può avviare altri processi; questi nuovi processi apparterranno allo stesso gruppo di processi del genitore a meno che non vengano intraprese altre azioni. Ogni processo può anche avere un "terminale di controllo", che inizia allo stesso modo del suo genitore.

La shell ha il concetto di lavori "in primo piano" e "in background". I lavori in primo piano sono gruppi di processi con controllo del terminale, mentre i lavori in background sono gruppi di processi senza controllo del terminale.

Ogni terminale ha un gruppo di processi in primo piano. Quando si porta un lavoro in primo piano, la shell lo imposta come gruppo di processi in primo piano del terminale; quando si mette un lavoro in background, la shell imposta il gruppo di processi in primo piano del terminale su un altro gruppo di processi o su se stesso.

I processi possono leggere e scrivere sul terminale di controllo se fanno parte del gruppo di processi in primo piano. Altrimenti ricevono SIGTTINe SIGTTOUsegnalano i tentativi di leggere e scrivere rispettivamente sul terminale. Per impostazione predefinita, questi segnali sospendono il processo, anche se la maggior parte delle shell si maschera in SIGTTOUmodo che un lavoro in background possa scrivere ininterrottamente sul terminale.


1
Questa è una buona e concisa panoramica della gestione dei processi shell e terminal. Potrebbe essere migliorato menzionando che un "lavoro" è una "pipeline", che può essere più di un processo collegato insieme in un gruppo di processi.
Chris Page

1

Nell'informatica, un lavoro è un'unità di lavoro o unità di esecuzione (che esegue tale lavoro). Un componente di un lavoro (come unità di lavoro) viene chiamato un'attività o un passaggio (se sequenziale, come in un flusso di lavoro). Come unità di esecuzione, un lavoro può essere concretamente identificato con un singolo processo, che a sua volta può avere sottoprocessi (processi figlio; il processo corrispondente al lavoro essendo il processo genitore) che svolgono i compiti o le fasi che comprendono il lavoro del lavoro; o con un gruppo di processi; o con un riferimento astratto a un processo oa un gruppo di processi, come nel controllo dei lavori Unix.

fonte

bei esempi


-1

Le definizioni di cui sopra sono molto tecniche, ma forse l'operazione voleva un chiarimento quotidiano. Penso che un lavoro sia un processo pianificato. Quando trattiamo i processi in generale non c'è necessariamente la nozione di programma, ma quando usiamo la parola "lavoro" intendiamo sempre che è programmato, o ripetitivo come un ciclo, è come un lavoratore.


1
Spiegare i voti in basso se si desidera votare in basso. Se questa risposta non è corretta, spiega almeno perché ritieni che non sia corretta. Fino ad ora penso ancora che la mia risposta abbia un senso, è il tipo di spiegazione che stavo cercando.
eloone,

Concordo sul fatto che colui che ha votato verso il basso avrebbe dovuto spiegare il perché. Ma penso che il motivo del downvote sia che la tua definizione di "lavoro" semplicemente non è corretta.
progrado

Ti interessa spiegare perché non è corretto? "Lavoro" non è chiaramente definito come un "processo" (con PID nel sistema). Nella mia esperienza "lavoro" è sempre stata una parola usata per definire un certo tipo di processo che era spesso programmato, e in background, e che è possibile avviare. Ecco perché è difficile da definire perché lo definisce l'utente. Potrebbe anche essere un gruppo di processi, ma lo è anche un "contenitore" (LXC), ma un "contenitore" non è un "lavoro". Anche un processo avviato come "nginx" non è un "lavoro". Il mio commento aggiunge ancora sth alla risposta. Ancora una volta, risponde a ciò che stavo cercando di capire.
eloone,

Sto anche ancora cercando una definizione corretta, quindi mi dispiace, non posso rispondere (ancora). Ma ciò che non è corretto, è che dovrebbe essere programmato.
progrado
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.