Công dụng và ý nghĩa của session và process group trong Unix?


83

Các quy trình Unix có id phiên và là một phần của nhóm quy trình - có thể được thay đổi / truy vấn bằng các hàm như setsid () / getpgrp ().

Tuy nhiên, khái niệm về nhóm quy trình và phiên luôn lẩn tránh tôi, có ai có thể giải thích ý nghĩa của việc có các phiên và nhóm quy trình riêng biệt mang lại ý nghĩa gì không - tại sao / khi nào người ta muốn tạo một phiên mới hoặc đặt một số quy trình trong cùng một phiên và / hoặc nhóm quy trình ?

Câu trả lời:


104

Nhóm quy trình là một tập hợp các quy trình liên quan, tất cả có thể được báo hiệu cùng một lúc.

Một phiên là một bộ sưu tập của các nhóm quy trình, đó là một trong hai gắn liền với một thiết bị đầu cuối duy nhất (gọi là thiết bị đầu cuối kiểm soát ) hoặc không kèm theo bất kỳ thiết bị đầu cuối.

Phiên được sử dụng để kiểm soát công việc: một trong những nhóm quy trình trong phiên là nhóm quy trình nền trước và có thể được gửi tín hiệu bởi các ký tự điều khiển đầu cuối. Bạn có thể nghĩ về một phiên có thiết bị đầu cuối điều khiển tương ứng với "đăng nhập" trên thiết bị đầu cuối đó. (Daemon thường tự tách mình khỏi bất kỳ thiết bị đầu cuối điều khiển nào bằng cách tạo một phiên mới mà không có một phiên.)

Ví dụ: nếu bạn chạy some_apptừ trình bao, trình bao sẽ tạo một nhóm quy trình mới cho nó và làm cho nhóm quy trình nền trước của phiên. ( some_appcó thể tạo một số quy trình con; theo mặc định chúng sẽ là một phần của cùng một nhóm quy trình.) Nếu sau đó bạn nhấn ^Z, some_appnhóm quy trình của sẽ được báo hiệu dừng nó; và nhóm quy trình của trình bao lại được chuyển thành nhóm quy trình nền trước. Sau đó, ví dụ: bg %1sẽ bắt đầu some_applại nhóm quy trình, nhưng giữ cho nó chạy ở chế độ nền.


Các tiêu chuẩn POSIX.1-2008 là khá dễ đọc (ít nhất, tôi nghĩ như vậy!) - hãy xem các định nghĩa và các bộ phận liên quan của "General ga Interface" chương.


3
Đó là một lời giải thích rất rất tốt với thông tin bổ sung có thể xuất hiện bất ngờ như câu hỏi sau
GP92

@MatthewSlattery có terminalterminal deviceđược đề cập trong tài liệu giống nhau không?
alhelal

12

Vỏ điều khiển công việc thao tác các phiên hoặc nhóm quy trình mọi lúc. Bạn có thể gửi cùng một tín hiệu đến tất cả các quy trình trong một nhóm quy trình chỉ bằng một lệnh gọi đến kill()hàm POSIX .

Tiêu chuẩn POSIX cho biết:

Nếu pid lớn hơn 0, sig sẽ được gửi đến tiến trình có ID tiến trình bằng pid.

Nếu pid bằng 0, sig sẽ được gửi tới tất cả các quy trình (không bao gồm một tập hợp quy trình hệ thống không xác định) có ID nhóm quy trình bằng ID nhóm quy trình của người gửi và quy trình có quyền gửi tín hiệu.

Nếu pid là -1, sig sẽ được gửi tới tất cả các quá trình (không bao gồm một tập hợp các quá trình hệ thống không xác định) mà quá trình đó có quyền gửi tín hiệu đó.

Nếu pid là âm, nhưng không phải -1, sig sẽ được gửi đến tất cả các quy trình (không bao gồm một tập hợp quy trình hệ thống không xác định) có ID nhóm quy trình bằng giá trị tuyệt đối của pid và quy trình có quyền gửi tín hiệu .

Ví dụ, khi một trình bao đăng nhập thoát ra, một tín hiệu SIGHUP được gửi đến tất cả các chương trình trong nhóm quy trình của nó.

Khi bạn thao tác các chương trình vào nền trước hoặc nền sau, bạn đang sử dụng các nhóm quy trình.

Ngoài ra còn có các thiết bị đầu cuối kiểm soát để lo lắng về; tín hiệu được tạo ra bởi một đầu cuối điều khiển có thể được gửi đến tất cả các chương trình trong một nhóm quy trình.

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.