Domanda

Attualmente sto frequentando un corso sui sistemi operativi e il mio insegnante ha trascorso metà della lezione a parlare di PID.Ha menzionato, come molti sanno, che i processi conoscono l'ID dei loro genitori.

La mia domanda è questa:

Il PCB di un processo conosce l'ID del suo figlio?Se sì, qual è il modo per ottenerlo?

È stato utile?

Soluzione

Per quanto ne so, un processo non ha un elenco esplicito dei PID dei suoi figli, ma può essere facilmente creato, poiché un processo dovrebbe sapere quali processi figli genera.Ad esempio la chiamata UNIX fork() restituisce il PID figlio nel processo genitore e 0 nel processo figlio, CreateProcess() su Windows restituisce (IIRC) il PID del nuovo processo creato.

Altri suggerimenti

Quando usi fork() su *nix, il valore restituito è il PID del figlio nel processo genitore e 0 nel processo figlio.Questo è un modo per scoprirlo.

Non sono sicuro che tengano traccia dell '"albero" della generazione dei processi, penso che dipenda dal sistema operativo che usi, ma poiché quando uccidi bash (o qualsiasi shell), vengono uccisi anche tutti i bambini in esecuzione, penso che i sistemi simili a UNIX lo facciano tieni traccia di questo.

Se stai utilizzando Linux o qualsiasi cosa che implementi le API Unix, quando un processo chiama fork() per creare un processo figlio, il genitore riceve il PID figlio come codice di ritorno, o -1 se il fork fallisce.Il processo figlio ottiene un codice di ritorno pari a zero.

Il PCB del processo conosce l'ID del suo figlio.

Come sappiamo, Fork() viene utilizzato per creare processi. Non accetta argomenti e restituisce un ID di processo. Dopo aver creato un nuovo processo figlio, sia il genitore che il figlio eseguiranno l'istruzione successiva dopo fork().Lì dobbiamo distinguere il genitore dal figlio. Questo può essere fatto testando il valore restituito da fork().

Se Fork() restituisce un valore negativo, la creazione del processo figlio non riesce.Se Fork() restituisce uno Zero al processo figlio appena creato.Se Fork() restituisce un valore positivo come ID di processo del processo figlio al processo padre.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top