Co to są „prowadzący sesje” w `ps`?

78

Co to są liderzy sesji, ponieważ w ps -dktórych wybiera się wszystkie procesy oprócz liderów sesji?

to ja
źródło

Odpowiedzi:

84

W systemie Linux każdy proces ma kilka powiązanych z nim identyfikatorów, w tym:

  • Identyfikator procesu (PID)

    Jest to dowolny numer identyfikujący proces. Każdy proces ma unikalny identyfikator, ale po zakończeniu procesu i pobraniu przez proces nadrzędny statusu wyjścia identyfikator procesu może zostać ponownie wykorzystany przez nowy proces.

  • Identyfikator procesu nadrzędnego (PPID)

    Jest to tylko PID procesu, który rozpoczął dany proces.

  • Identyfikator grupy procesów (PGID)

    Jest to tylko PID lidera grupy procesów. Jeśli PID == PGID, to ten proces jest liderem grupy procesów.

  • Identyfikator sesji (SID)

    Jest to tylko PID lidera sesji. Jeśli PID == SID, ten proces jest liderem sesji.

Sesje i grupy procesów są tylko sposobami traktowania wielu powiązanych procesów jako jednostki. Wszyscy członkowie grupy procesów zawsze należą do tej samej sesji, ale sesja może mieć wiele grup procesów.

Zwykle powłoka będzie liderem sesji, a każdy potok wykonywany przez tę powłokę będzie grupą procesów. Ma to na celu ułatwienie zabicia dzieci pocisków, gdy ta wyjdzie. (Zobacz wyjście (3), aby poznać szczegóły.)

Nie sądzę, aby istniał specjalny termin dla członka sesji lub grupy procesów, który nie jest liderem.

cjm
źródło
5
Uwaga: Służy ps xao pid,ppid,pgid,sid,commdo wyświetlania tych identyfikatorów.
Mike R
1
Dlaczego ludzie nie dają więcej takich przykładowych odpowiedzi na podstawie rzeczywistych porównań. +1
RootPhoenix
24

Lider sesji to proces, w którym identyfikator sesji == identyfikator procesu. Brzmi to wymyślone, ale identyfikator sesji jest dziedziczony przez procesy potomne. Niektóre operacje w systemie UNIX / Linux działają na sesjach procesów, na przykład negując identyfikator procesu podczas wysyłania do systemowej komendy lub komendy kill. Najczęstszym zastosowaniem tego jest wylogowanie się z powłoki. System operacyjny wyśle kill -HUP -$$, który wyśle ​​sygnał SIGHUP (rozłączenie) do wszystkich procesów z tym samym identyfikatorem sesji co powłoka. Kiedy odrzucasz proces, identyfikator sesji procesu jest zmieniany z powłoki, więc nie będzie reagował na sygnał zawieszenia. Jest to jedna z części procesu, który ma zostać procesem demona.

Większość procesów wywoływanych z menedżera okien / środowiska graficznego ma taki sam identyfikator sesji jak jeden z programów startowych. Umożliwia to kill -HUP -$$systemowi operacyjnemu wykonanie tej samej operacji na wszystkich programach: takich jak przeglądarka, odtwarzacz muzyki, libreoffice, klient komunikatora itp. Są to procesy, które nie są liderami sesji.

Arcege
źródło
Proszę, nie przejmuj się, ale może potrzebuję trochę więcej wyjaśnień - lider sesji to jeden, jak nazywają się inni i jakie są (zachowanie, czym różnią się od lidera sesji)?
its_me
Są oni, jak sądzę, nazywani członkami sesji.
Arcege
Podoba mi się twoje wyjaśnienie, ale wciąż brakuje mi jednego punktu: IIUC, w każdym momencie każdy rozpoczęty przeze mnie proces jest faktycznie potomkiem powłoki, z której się zalogowałem (chyba, że ​​go wyrzekłem). Dlaczego OS nie miałby chodzić po drzewie procesów i zabijać wszystkie rodzeństwo tego procesu i ich rodzeństwo? (Właściwie to zawsze tak myślałem ... do dzisiaj: D) Więc jakie jest uzasadnienie używania sesji zamiast tego?
Alois Mahdal
Konieczne jest ustalenie, kiedy proces nie jest już częścią oryginalnej sesji (na przykład powłoka logowania lub demon). Jedną z myśli może być automatyczna zmiana PPID (pid nadrzędny) na 1, ale to psuje drzewo procesów. Nowy identyfikator sesji tworzy grupę, do której można wysłać sygnał razem. Przykładem tego jest GUI, odpal firefox jako osobną sesję. Następnie, po naciśnięciu przycisku [X], wyślij sygnał do sesji firefoxa i jego dzieci, ale nie ma to wpływu na menedżera okien - nie można tego zrobić z prostymi relacjami PPID-PID.
Arcege
Gdy GUI umiera, całe drzewo procesów, a nie grupa sesji, może otrzymać sygnał. Dwa różne pożądane zachowania: zabicie jednej „aplikacji” (zabicie Firefoxa i jego wtyczek), w przeciwieństwie do zabicia wszystkich procesów potomnych (wyjście z GUI). Podobne działanie z emacsem i chromem, oczekuję.
Arcege
13

Myślałem, że znam odpowiedź na to pytanie, ale napisałem program w C, aby to zrozumieć.

#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;
}

Kompilowałem to z cc -g -o sid sid.c , uruchomiłem na kilka różnych sposobów, aby zobaczyć, co się stanie:

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

Byłem trochę zaskoczony tym, co Linux (2.6.39) oddał. Znalazłem też stronę podręcznika sekcji 7, „poświadczenia”.

Moja rada to zrobić man 7 credentials(lub odpowiednik, jeśli nie na Linuksie) i przeczytać sekcję o grupie procesów i sesji, aby sprawdzić, czy możesz to rozwiązać.

Bruce Ediger
źródło
1
Jako początkujący linux nie mogłem zrozumieć, co powiedziałeś. Wygląda na to, że też jesteś zaskoczony? Ale prawdopodobnie masz wystarczającą wiedzę, aby zrozumieć, co znaczy odpowiedź Arcege. Jeśli tak, czy możesz wyjaśnić to samo w sposób bardziej przejrzysty?
its_me
Ciekawe ... dzięki ... Więc, identyfikator sesji (SID) jest terminal w PID dla ./sida nohup ./sid, a po uruchomieniu setsid ./sid, identyfikator sesji (SID) jest nowy i jest taki sam jak proces PID ... I” Nie jestem pewien, dlaczego nohup zapobiegł rozwidleniu (lub wydaje się, że tak), ale myślę, że mam ogólny pomysł ...
Peter.O