Processus Nice et enfant

22

Quelqu'un peut-il me dire quelle est la relation entre un niceniveau spécifié et les processus enfants?

Par exemple, si j'ai une valeur par défaut nicede 0, et que je démarre un script avec nice 5, qui à son tour démarre certains processus enfants (dans ce cas environ 20 en parallèle), quelle est la beauté des processus enfants?

NWS
la source
1
Seul l'utilisateur root peut diminuer la finesse d'un processus, et la valeur est héritée par les processus enfants dans toute forkimplémentation sensible .
jw013
@ jw013 - Pour plus de clarté, j'écris des scripts, j'utilise &pour générer des processus enfants , j'utilise pas c& fork.
NWS
3
sauf si vous utilisez un système d'exploitation non Unix / Linux, il y a fort à parier que votre shell génère des processus d'arrière-plan fork.
jw013

Réponses:

28

Un processus enfant hérite de toute nicevaleur détenue par le parent au moment où il est bifurqué (dans votre exemple, 5).

Cependant, si la nicevaleur du processus parent change après avoir bifurqué les processus enfants, les processus enfants n'héritent pas de la nouvelle nicevaleur.

Vous pouvez facilement l'observer avec l'outil de surveillance top. Si le nicechamp (NI) n'est pas affiché par défaut, vous pouvez l'ajouter en appuyant sur fet en choisissant I. Cela ajoutera la NIcolonne à l' topaffichage.

* 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                                         

Bonne information de man 2 fork

fork () crée un nouveau processus en dupliquant le processus appelant. Le nouveau processus, appelé enfant, est un double exact du processus appelant, appelé parent, à l'exception des points suivants:

  • L'enfant a son propre ID de processus unique et ce PID ne correspond à l'ID d'aucun groupe de processus existant (setpgid (2)).
  • L'ID de processus parent de l'enfant est le même que l'ID de processus parent.
  • L'enfant n'hérite pas des verrous mémoire de ses parents (mlock (2), mlockall (2)).
  • Les utilisations des ressources de processus (getrusage (2)) et les compteurs de temps CPU (times (2)) sont remis à zéro chez l'enfant.
  • L'ensemble de signaux en attente de l'enfant est initialement vide (sigpending (2)).
  • L'enfant n'hérite pas des ajustements de sémaphore de son parent (semop (2)).
  • L'enfant n'hérite pas des verrous d'enregistrement de son parent (fcntl (2)).
  • L'enfant n'hérite pas des temporisateurs de son parent (setitimer (2), alarm (2), timer_create (2)).
  • L'enfant n'hérite pas des opérations d'E / S asynchrones en suspens de son parent (aio_read (3), aio_write (3)), ni n'hérite des contextes d'E / S asynchrones de son parent (voir io_setup (2)).
George M
la source