Proses yang bagus dan anak

22

Bisakah seseorang memberi tahu saya apa hubungan antara nicelevel yang ditentukan dan proses anak?

Sebagai contoh, jika saya memiliki standar nicedari 0, dan aku mulai script dengan nice 5, yang pada gilirannya dimulai beberapa proses anak (dalam hal ini sekitar 20 secara paralel), apa yang bagus dari proses anak?

NWS
sumber
1
Hanya pengguna root yang dapat mengurangi kebaikan proses, dan nilainya diwarisi oleh proses anak dalam setiap forkimplementasi yang masuk akal .
jw013
@ jw013 - Untuk kejelasan, saya membuat skrip, gunakan &untuk menelurkan proses anak, tidak menggunakan c& fork.
NWS
3
kecuali jika Anda menggunakan sistem operasi non-Unix / Linux, itu adalah taruhan yang cukup aman bahwa shell Anda memunculkan proses latar belakang fork.
jw013

Jawaban:

28

Proses anak mewarisi nicenilai apa pun yang dipegang oleh orang tua pada saat itu bercabang dua (dalam contoh Anda, 5).

Namun, jika nicenilai proses induk berubah setelah forking proses anak, proses anak tidak mewarisi nilai baru nice.

Anda dapat dengan mudah mengamati ini dengan alat pemantauan top. Jika nicebidang (NI) tidak ditampilkan secara default, Anda dapat menambahkannya dengan menekan fdan memilih I. Ini akan menambahkan NIkolom ke toptampilan.

* 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                                         

Informasi bagus dari man 2 fork

fork () menciptakan proses baru dengan menduplikasi proses panggilan. Proses baru, disebut sebagai anak, adalah duplikat yang tepat dari proses panggilan, disebut sebagai orang tua, kecuali untuk hal-hal berikut:

  • Anak memiliki ID proses uniknya sendiri, dan PID ini tidak cocok dengan ID dari grup proses yang ada (setpgid (2)).
  • ID proses orang tua anak sama dengan ID proses orang tua.
  • Anak tidak mewarisi kunci memori orang tuanya (mlock (2), mlockall (2)).
  • Pemanfaatan sumber daya proses (getrusage (2)) dan penghitung waktu CPU (kali (2)) diatur ulang ke nol pada anak.
  • Set sinyal pending anak pada awalnya kosong (sigpending (2)).
  • Anak tidak mewarisi penyesuaian semaphore dari induknya (semop (2)).
  • Anak tidak mewarisi kunci rekaman dari induknya (fcntl (2)).
  • Anak tidak mewarisi timer dari induknya (setitimer (2), alarm (2), timer_create (2)).
  • Anak tidak mewarisi operasi I / O asinkron yang luar biasa dari induknya (aio_read (3), aio_write (3)), juga tidak mewarisi konteks I / O asinkron dari induknya (lihat io_setup (2)).
George M
sumber