Các nhà lãnh đạo phiên giao dịch trực tuyến là gì trong `ps`?


78

Các nhà lãnh đạo phiên là gì, trong ps -dđó chọn tất cả các quy trình ngoại trừ các nhà lãnh đạo phiên?

Câu trả lời:


84

Trong Linux, mọi quy trình đều có một số ID được liên kết với nó, bao gồm:

  • ID tiến trình (PID)

    Đây là một số tùy ý xác định quy trình. Mỗi quy trình có một ID duy nhất, nhưng sau khi quy trình thoát và quy trình cha đã lấy trạng thái thoát, ID quy trình được giải phóng để được sử dụng lại bởi một quy trình mới.

  • ID tiến trình cha mẹ (PPID)

    Đây chỉ là PID của quá trình bắt đầu quá trình được đề cập.

  • ID nhóm quy trình (PGID)

    Đây chỉ là PID của người lãnh đạo nhóm quy trình. Nếu PID == PGID, thì quá trình này là trưởng nhóm quy trình.

  • ID phiên (SID)

    Đây chỉ là PID của người lãnh đạo phiên. Nếu PID == SID, thì quá trình này là một nhà lãnh đạo phiên.

Phiên và nhóm quy trình chỉ là cách để coi một số quy trình liên quan là một đơn vị. Tất cả các thành viên của một nhóm quy trình luôn thuộc về cùng một phiên, nhưng một phiên có thể có nhiều nhóm quy trình.

Thông thường, một shell sẽ là một người dẫn đầu phiên và mọi đường ống được thực hiện bởi shell đó sẽ là một nhóm quy trình. Điều này là để làm cho nó dễ dàng để giết những đứa trẻ của một cái vỏ khi nó thoát ra. (Xem lối ra (3) để biết chi tiết về tin đồn.)

Tôi không nghĩ có một điều khoản đặc biệt cho một thành viên của một phiên hoặc nhóm quy trình không phải là người lãnh đạo.


5
Lưu ý: Sử dụng ps xao pid,ppid,pgid,sid,commđể xem các ID này.
Mike R

1
Tại sao mọi người không đưa ra nhiều câu trả lời dựa trên so sánh thế giới thực minh họa như vậy .. +1
RootPhoenix

24

Một người lãnh đạo phiên là một quá trình trong đó phiên id == process id. Điều này nghe có vẻ khó khăn, nhưng id phiên được kế thừa bởi các tiến trình con. Một số hoạt động trong UNIX / Linux hoạt động trên các phiên quy trình, ví dụ, phủ định id tiến trình khi gửi đến lệnh gọi hoặc lệnh hệ thống tiêu diệt. Việc sử dụng phổ biến nhất cho việc này là khi đăng xuất khỏi vỏ. HĐH sẽ gửi kill -HUP -$$, sẽ gửi tín hiệu SIGHUP (gác máy) cho tất cả các quy trình có cùng id phiên như trình bao. Khi bạn từ chối một quy trình, id phiên của quy trình được thay đổi từ trình bao, do đó, nó sẽ không phản hồi tín hiệu gác máy. Đây là một phần của quy trình để trở thành quy trình daemon.

Hầu hết các quy trình được gọi từ trình quản lý cửa sổ / môi trường đồ họa có cùng id phiên với một trong các chương trình khởi động. Điều này cho phép HĐH thực hiện cùng một kill -HUP -$$hoạt động trên tất cả các chương trình: chẳng hạn như trình duyệt, trình phát nhạc, libreoffice, ứng dụng khách IM, v.v ... Đây là những quy trình không phải là người dẫn đầu phiên.


Xin đừng bận tâm nhưng tôi có thể cần làm rõ hơn một chút - - trưởng nhóm là một, những người khác được gọi là gì và họ thích gì (hành vi, họ làm gì khác với Trưởng nhóm)?
it_me

Họ được gọi là thành viên của phiên họp, tôi tin.
Arcege

Tôi thích lời giải thích của bạn nhưng tôi vẫn còn thiếu một điểm: IIUC, bất cứ lúc nào mọi quy trình tôi bắt đầu thực sự là con của cái vỏ mà tôi đã đăng nhập (tất nhiên trừ khi tôi từ chối nó). Tại sao HĐH không chỉ đi trên cây quy trình và giết tất cả anh chị em của quá trình này và anh chị em của họ? (Trên thực tế đó là những gì tôi luôn nghĩ nó làm ... cho đến ngày hôm nay: D) Vậy lý do đằng sau việc sử dụng phiên là gì?
Alois Mahdal

Cần phải đi xa để xác định khi nào một quá trình không còn là một phần của phiên ban đầu (ví dụ: vỏ đăng nhập hoặc daemon). Một suy nghĩ có thể là tự động thay đổi PPID (pid cha) thành 1, nhưng điều đó phá vỡ cây quy trình. Id phiên mới tạo một nhóm có thể được gửi tín hiệu cùng nhau. Một ví dụ về điều này là GUI, tắt firefox như một phiên riêng biệt. Sau đó, khi nhấn nút [X], gửi tín hiệu phiên của firefox và các con của nó, nhưng trình quản lý cửa sổ không bị ảnh hưởng - không thể thực hiện điều này với các mối quan hệ PPID-PID thẳng.
Arcege

Khi GUI chết, toàn bộ cây quy trình, không phải nhóm phiên, có thể nhận được tín hiệu. Hai hành vi mong muốn khác nhau: giết một 'ứng dụng' (giết firefox và các plugin của nó), so với giết tất cả các tiến trình con (thoát khỏi gui). Hoạt động tương tự với emacs và chrome, tôi mong đợi.
Arcege

13

Tôi nghĩ rằng tôi biết câu trả lời cho điều này, nhưng tôi đã viết một chương trình C để tìm ra điều này.

#include <stdio.h>
#include <unistd.h>

int
main(int ac, char **av)
{
        pid_t sid, mypid, pgid, gid;

        mypid = getpid();
        sid = getsid(0);
        pgid = getpgid(0);
        gid = getpgrp();

        printf("PID %d\n", mypid);
        printf("process group ID of session leader: %d\n", sid);
        printf("process group ID: %d\n", pgid);
        printf("process group ID: %d\n", gid);

        if (!fork())
        {
                mypid = getpid();
                sid = getsid(0);
                pgid = getpgid(0);
                gid = getpgrp();

                printf("child PID %d\n", mypid);
                printf("process group ID of session leader: %d\n", sid);
                printf("process group ID: %d\n", pgid);
                printf("process group ID: %d\n", gid);

                _exit(0);
        }

        return 0;
}

Tôi đã biên dịch nó với cc -g -o sid sid.c tôi chạy nó theo một vài cách khác nhau, để xem điều gì xảy ra:

./sid
nohup ./sid > sid.out
setsid ./sid

Tôi đã rất ngạc nhiên bởi những gì Linux (2.6,39) đã trả lại. Tôi cũng tìm thấy phần 7 trang man, "thông tin đăng nhập".

Lời khuyên của tôi là hãy làm man 7 credentials(hoặc tương đương nếu không có trên Linux) và đọc phần về nhóm quy trình và phiên để xem bạn có thể giải đố được không.


1
Là một người mới sử dụng linux, tôi không thể hiểu được những gì bạn nói. Hình như bạn đang hoang mang quá? Nhưng có lẽ bạn đủ hiểu biết để hiểu câu trả lời của Arcege nghĩa là gì. Nếu bạn làm, bạn có thể vui lòng giải thích tương tự rõ ràng hơn?
it_me

Thú vị ... nhờ ... Vì vậy, các phiên id (SID) là của thiết bị đầu cuối PID cho ./sidnohup ./sid, và khi bạn chạy setsid ./sid, id phiên (SID) là thương hiệu mới và cũng giống như quá trình PID ... Tôi Tôi không chắc tại sao nohup ngăn ngã ba (hoặc dường như), nhưng tôi nghĩ rằng tôi đã có ý tưởng chung ...
Peter.O
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.