Гарні та дитячі процеси


22

Хтось може сказати мені, який взаємозв'язок між певним niceрівнем та дочірніми процесами?

Наприклад, якщо у мене є по замовчуванням niceв 0, і я починаю сценарій з nice 5, що , в свою чергу , запускає кілька дочірніх процесів (в даному випадку близько 20 паралельно), що є добре з дочірніх процесів?


1
Лише користувач root може зменшити приємність процесу, а значення успадковується дочірніми процесами в будь-якій розумній forkреалізації.
jw013

@ jw013 - для наочності я створюю сценарії, використовуючи &для нерестування дочірніх процесів, а не c& fork.
NWS

3
якщо ви не користуєтесь ОС, яка не працює Unix / Linux, це досить безпечна ставка, з якою ваша оболонка породжує фонові процеси fork.
jw013

Відповіді:


28

Дочірній процес успадковує будь-яке niceзначення, яке зберігається батьком у той момент, коли воно роздвоєне (у вашому прикладі 5).

Однак якщо niceзначення батьківського процесу змінюється після форсування дочірніх процесів, дочірні процеси не успадковують нове niceзначення.

Ви можете легко спостерігати за цим інструментом моніторингу top. Якщо niceполе (NI) не відображається за замовчуванням, його можна додати натисканням fта вибором I. Це додасть NIстовпчик на topдисплей.

* 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                                         

Хороша інформація від man 2 fork

fork () створює новий процес шляхом дублювання процесу виклику. Новий процес, який називають дочірнім, - це точний дублікат процесу виклику, який називається батьківським, за винятком наступних пунктів:

  • У дитини є свій унікальний ідентифікатор процесу, і цей PID не відповідає ідентифікатору будь-якої існуючої групи процесів (setpgid (2)).
  • Ідентифікатор батьківського процесу дитини такий самий, як ідентифікатор батьківського процесу.
  • Дитина не успадковує блоків пам'яті свого батька (mlock (2), mlockall (2)).
  • Використання ресурсів процесу (getrusage (2)) та лічильники часу процесора (раз (2)) у дитини скидаються до нуля.
  • Набір дитини відкладених сигналів спочатку порожній (вивіска (2)).
  • Дитина не успадковує коригування семафору від свого батька (semop (2)).
  • Дитина не успадковує блоки записів від свого батьківського (fcntl (2)).
  • Дитина не успадковує таймери від свого батька (setitimer (2), alarm (2), timer_create (2)).
  • Дитина не успадковує видатні асинхронні операції вводу / виводу від свого батька (aio_read (3), aio_write (3)), а також не успадковує жодного асинхронного контексту вводу / виводу від свого батька (див. Io_setup (2)).
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.