Processi piacevoli e infantili


22

Qualcuno può dirmi qual è la relazione tra un nicelivello specificato e processi figlio?

Ad esempio, se ho un valore predefinito nicedi 0, e avvio uno script con nice 5, che a sua volta avvia alcuni processi figlio (in questo caso circa 20 in parallelo), qual è il bello dei processi figlio?


1
Solo l'utente root può ridurre la gentilezza di un processo e il valore viene ereditato dai processi figlio in qualsiasi forkimplementazione sensata .
jw013,

@ jw013 - Per chiarezza, sto scrivendo script, usando &per generare processi figlio, non usando c& fork.
NWS,

3
a meno che non ci si trovi su un sistema operativo non Unix / Linux, è una scommessa abbastanza sicura con cui la shell genera processi in background fork.
jw013,

Risposte:


28

Un processo figlio eredita qualunque nicevalore sia detenuto dal genitore nel momento in cui viene biforcato (nel tuo esempio 5).

Tuttavia, se il nicevalore del processo padre cambia dopo aver eseguito il fork dei processi figlio, i processi figlio non ereditano il nuovo nicevalore.

Puoi facilmente osservarlo con lo strumento di monitoraggio top. Se il nicecampo (NI) non viene visualizzato per impostazione predefinita, è possibile aggiungerlo premendo fe scegliendo I. Questo aggiungerà la NIcolonna al topdisplay.

* I: NI = Nice value

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1937 root      20   0  206m  66m  45m S  6.2  1.7  11:03.67 X                                         

Buone informazioni da man 2 fork

fork () crea un nuovo processo duplicando il processo di chiamata. Il nuovo processo, indicato come figlio, è un duplicato esatto del processo chiamante, indicato come genitore, ad eccezione dei seguenti punti:

  • Il figlio ha un proprio ID processo univoco e questo PID non corrisponde all'ID di nessun gruppo di processi esistente (setpgid (2)).
  • L'ID del processo principale del figlio è uguale all'ID del processo principale.
  • Il bambino non eredita i blocchi di memoria del genitore (mlock (2), mlockall (2)).
  • Gli utilizzi delle risorse di processo (getrusage (2)) e i contatori dei tempi della CPU (times (2)) vengono reimpostati su zero nel child.
  • L'insieme di segnali in sospeso del bambino è inizialmente vuoto (sigpending (2)).
  • Il bambino non eredita le regolazioni dei semafori dal suo genitore (semop (2)).
  • Il figlio non eredita i blocchi dei record dal suo genitore (fcntl (2)).
  • Il figlio non eredita i timer dal suo genitore (setitimer (2), alarm (2), timer_create (2)).
  • Il figlio non eredita operazioni di I / O asincrone in sospeso dal suo genitore (aio_read (3), aio_write (3)), né eredita contesti di I / O asincroni dal suo genitore (vedere io_setup (2)).
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.