Quá trình tốt đẹp và trẻ em


22

Ai đó có thể cho tôi biết mối quan hệ giữa một nicemức quy định và các quy trình con là gì không?

Ví dụ, nếu tôi có một mặc định nicecủa 0, và tôi bắt đầu một kịch bản với nice 5, do đó bắt đầu một số tiến trình con (trong trường hợp này khoảng 20 song song), các tốt đẹp của các quá trình con là gì?


1
Chỉ người dùng root mới có thể làm giảm tính độc đáo của một quy trình và giá trị được kế thừa bởi các quy trình con trong bất kỳ forktriển khai hợp lý nào .
jw013

@ jw013 - Để rõ ràng, tôi đang viết kịch bản, sử dụng &để sinh ra các tiến trình con, không sử dụng c& fork.
NWS

3
trừ khi bạn đang sử dụng HĐH không phải Unix / Linux, đây là một cách đặt cược khá an toàn mà trình bao của bạn sinh ra các quá trình nền fork.
jw013

Câu trả lời:


28

Một tiến trình con kế thừa bất cứ nicegiá trị nào được giữ bởi cha mẹ tại thời điểm nó được chia rẽ (trong ví dụ của bạn 5).

Tuy nhiên, nếu nicegiá trị của tiến trình cha thay đổi sau khi hủy bỏ các tiến trình con, thì các tiến trình con không kế thừa nicegiá trị mới .

Bạn có thể dễ dàng quan sát điều này với công cụ giám sát top. Nếu nicetrường (NI) không được hiển thị theo mặc định, bạn có thể thêm nó bằng cách nhấn fvà chọn I. Điều này sẽ thêm NIcột vào topmàn hình.

* 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                                         

Thông tin tốt từ man 2 fork

fork () tạo ra một quy trình mới bằng cách sao chép quy trình gọi. Quá trình mới, được gọi là đứa trẻ, là một bản sao chính xác của quy trình gọi, được gọi là cha mẹ, ngoại trừ các điểm sau:

  • Đứa trẻ có ID tiến trình duy nhất của riêng nó và PID này không khớp với ID của bất kỳ nhóm quy trình hiện có nào (setpgid (2)).
  • ID tiến trình cha mẹ của con giống như ID tiến trình của cha mẹ.
  • Đứa trẻ không thừa hưởng khóa bộ nhớ của cha mẹ (mlock (2), mlockall (2)).
  • Quá trình sử dụng tài nguyên quy trình (getrusage (2)) và bộ đếm thời gian CPU (lần (2)) được đặt lại về 0 ở trẻ.
  • Tập hợp các tín hiệu đang chờ xử lý của trẻ ban đầu trống (sigpending (2)).
  • Đứa trẻ không thừa hưởng điều chỉnh semaphore từ cha mẹ của nó (semop (2)).
  • Đứa trẻ không kế thừa các khóa hồ sơ từ cha mẹ của nó (fcntl (2)).
  • Đứa trẻ không kế thừa bộ định thời từ cha mẹ của nó (setitimer (2), báo động (2), timer_create (2)).
  • Đứa trẻ không kế thừa các hoạt động I / O không đồng bộ nổi bật từ cha mẹ của nó (aio_read (3), aio_write (3)), cũng không thừa hưởng bất kỳ bối cảnh I / O không đồng bộ nào từ cha mẹ của nó (xem io_setup (2)).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.