Ładne i potomne procesy


22

Czy ktoś może mi powiedzieć, jaki jest związek między określonym nicepoziomem a procesami potomnymi?

Na przykład, jeśli mam domyślne niceo 0, a ja uruchomić skrypt nice 5, który z kolei uruchamia pewne procesy potomne (w tym przypadku około 20 równolegle), co jest miłe z procesów potomnych?


1
Tylko użytkownik root może zmniejszyć pewność procesu, a wartość jest dziedziczona przez procesy potomne w każdej sensownej forkimplementacji.
jw013

@ jw013 - Dla jasności piszę skrypty, używam &do odradzania procesów potomnych, nie używam c& fork.
NWS

3
chyba że masz system operacyjny inny niż Unix / Linux, jest to dość bezpieczny zakład, w którym twoja powłoka odradza procesy w tle fork.
jw013

Odpowiedzi:


28

Proces potomny dziedziczy dowolną nicewartość przechowywaną przez rodzica w momencie jego rozwidlenia (w twoim przykładzie 5).

Jeśli jednak nicewartość procesu nadrzędnego zmienia się po rozwidleniu procesów potomnych, procesy potomne nie dziedziczą nowej nicewartości.

Możesz to łatwo zaobserwować za pomocą narzędzia do monitorowania top. Jeśli nicepole (NI) nie jest domyślnie wyświetlane, możesz je dodać, naciskając fi wybierając I. Spowoduje to dodanie NIkolumny do topwyświetlacza.

* 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                                         

Dobra informacja z man 2 fork

fork () tworzy nowy proces poprzez duplikację procesu wywołującego. Nowy proces, zwany dzieckiem, jest dokładną kopią procesu wywoływania, zwanego nadrzędnym, z wyjątkiem następujących punktów:

  • Dziecko ma swój własny unikalny identyfikator procesu, a ten identyfikator PID nie odpowiada identyfikatorowi żadnej istniejącej grupy procesów (setpgid (2)).
  • Identyfikator procesu nadrzędnego dziecka jest taki sam, jak identyfikator procesu nadrzędnego.
  • Dziecko nie dziedziczy blokad pamięci rodzica (mlock (2), mlockall (2)).
  • Wykorzystania zasobów procesowych (getrusage (2)) i liczniki czasu procesora (razy (2)) są zerowane w potomku.
  • Zestaw oczekujących sygnałów dziecka jest początkowo pusty (sigpending (2)).
  • Dziecko nie dziedziczy dopasowań semaforów od swojego rodzica (semop (2)).
  • Dziecko nie dziedziczy blokad rekordów po rodzicu (fcntl (2)).
  • Dziecko nie dziedziczy liczników czasu po rodzicu (setitimer (2), alarm (2), timer_create (2)).
  • Dziecko nie dziedziczy zaległych asynchronicznych operacji we / wy od swojego rodzica (aio_read (3), aio_write (3)), ani nie dziedziczy żadnych asynchronicznych kontekstów we / wy od swojego rodzica (patrz io_setup (2)).
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.