it-swarm.com.de

Was sind "Sitzungsleiter" in "ps"?

Was sind Sitzungsleiter, wie in ps -d welche wählt alle Prozesse außer den Sitzungsleitern aus?

83
its_me

Unter Linux sind jedem Prozess mehrere IDs zugeordnet, darunter:

  • Prozess-ID (PID)

    Dies ist eine beliebige Nummer, die den Prozess identifiziert. Jeder Prozess hat eine eindeutige ID. Nachdem der Prozess beendet und der übergeordnete Prozess den Beendigungsstatus abgerufen hat, kann die Prozess-ID von einem neuen Prozess wiederverwendet werden.

  • Übergeordnete Prozess-ID (PPID)

    Dies ist nur die PID des Prozesses, der den betreffenden Prozess gestartet hat.

  • Prozessgruppen-ID (PGID)

    Dies ist nur die PID des Prozessgruppenleiters. Wenn PID == PGID, ist dieser Prozess ein Prozessgruppenleiter.

  • Sitzungs-ID (SID)

    Dies ist nur die PID des Sitzungsleiters. Wenn PID == SID, ist dieser Prozess ein Sitzungsleiter.

Sitzungen und Prozessgruppen sind nur Möglichkeiten, eine Reihe verwandter Prozesse als Einheit zu behandeln. Alle Mitglieder einer Prozessgruppe gehören immer derselben Sitzung an, eine Sitzung kann jedoch mehrere Prozessgruppen haben.

Normalerweise ist eine Shell ein Sitzungsleiter, und jede von dieser Shell ausgeführte Pipeline ist eine Prozessgruppe. Dies soll es einfach machen, die Kinder einer Shell zu töten, wenn sie beendet wird. (Siehe Ausfahrt (3) für die blutigen Details.)

Ich glaube nicht, dass es einen speziellen Begriff für ein Mitglied einer Sitzung oder Prozessgruppe gibt, das nicht der Leiter ist.

87
cjm

Ein Sitzungsleiter ist ein Prozess, bei dem die Sitzungs-ID == die Prozess-ID ist. Dies klingt erfunden, aber die Sitzungs-ID wird von untergeordneten Prozessen geerbt. Einige Vorgänge unter UNIX/Linux werden in Prozesssitzungen ausgeführt, z. B. das Negieren der Prozess-ID beim Senden an den Aufruf oder Befehl des Kill-Systems. Dies wird am häufigsten verwendet, wenn Sie sich von einer Shell abmelden. Das Betriebssystem sendet kill -HUP -$$, Das ein SIGHUP-Signal (Hangup-Signal) an alle Prozesse mit derselben Sitzungs-ID wie die Shell sendet. Wenn Sie einen Prozess ablehnen, wird die Sitzungs-ID des Prozesses in der Shell geändert, sodass er nicht auf das Auflegesignal reagiert. Dies ist ein Teil des Prozesses, um ein Daemon-Prozess zu werden.

Die meisten Prozesse, die vom Fenstermanager/der grafischen Umgebung aufgerufen werden, haben dieselbe Sitzungs-ID wie eines der Startprogramme. Auf diese Weise kann das Betriebssystem für alle Programme den gleichen kill -HUP -$$ - Vorgang ausführen: z. B. für Ihren Browser, Musik-Player, libreoffice, IM-Client usw. Dies sind die Prozesse, die keine Sitzungsleiter sind.

24
Arcege

Ich dachte, ich wüsste die Antwort darauf, aber ich schrieb ein C-Programm, um das herauszufinden.

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

Ich habe es mit cc -g -o sid sid.c Kompiliert. Ich habe es auf verschiedene Arten ausgeführt, um zu sehen, was passiert:

./sid
Nohup ./sid > sid.out
setsid ./sid

Ich war etwas überrascht von dem, was Linux (2.6.39) zurückgab. Ich fand auch die Manpage in Abschnitt 7, "Anmeldeinformationen".

Mein Rat ist, man 7 credentials (Oder das Äquivalent, wenn nicht unter Linux) zu tun und den Abschnitt über Prozessgruppen und Sitzungen zu lesen, um zu sehen, ob Sie es herausfinden können.

13
Bruce Ediger