Qual è la differenza tra un "lavoro" e un "processo"?
Qual è la differenza tra un "lavoro" e un "processo"?
Risposte:
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.
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?
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 SIGTTIN
e SIGTTOU
segnalano 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 SIGTTOU
modo che un lavoro in background possa scrivere ininterrottamente sul terminale.
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.
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.