Was sind Sitzungsleiter, bei ps -d
denen alle Prozesse außer den Sitzungsleitern ausgewählt werden?
Was sind Sitzungsleiter, bei ps -d
denen alle Prozesse außer den Sitzungsleitern ausgewählt werden?
Antworten:
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 wurde und der übergeordnete Prozess den Beendigungsstatus abgerufen hat, wird die Prozess-ID für die Wiederverwendung durch einen neuen Prozess freigegeben.
Ü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, dann ist dieser Prozess ein Prozessgruppenleiter.
Sitzungs-ID (SID)
Dies ist nur die PID des Sitzungsleiters. Wenn PID == SID, dann ist dieser Prozess ein Sitzungsleiter.
Sitzungen und Prozessgruppen sind nur Möglichkeiten, eine Reihe von verwandten Prozessen als Einheit zu behandeln. Alle Mitglieder einer Prozessgruppe gehören immer zu derselben Sitzung, eine Sitzung kann jedoch mehrere Prozessgruppen enthalten.
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 Muschel zu töten, wenn sie herauskommt. (Siehe Ausgang (3) für die Details.)
Ich glaube nicht, dass es einen speziellen Begriff für ein Mitglied einer Sitzung oder Prozessgruppe gibt, das nicht der Anführer ist.
Ein Sitzungsleiter ist ein Prozess, bei dem die Sitzungs-ID == die Prozess-ID ist. Das klingt erfunden, aber die Sitzungs-ID wird von untergeordneten Prozessen geerbt. Einige Operationen in UNIX / Linux werden in Prozesssitzungen ausgeführt, z. B. das Negieren der Prozess-ID, wenn sie an den Systemaufruf oder Befehl kill gesendet werden. Die häufigste Verwendung hierfür ist das Abmelden von einer Shell. Das Betriebssystem kill -HUP -$$
sendet ein SIGHUP-Signal (Auflegen) an alle Prozesse mit derselben Sitzungs-ID wie die Shell. Wenn Sie einen Prozess ablehnen, wird die Sitzungs-ID des Prozesses von der Shell aus geändert, sodass er nicht auf das Aufhängesignal 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 kill -HUP -$$
Betriebssystem für alle Programme den gleichen Vorgang ausführen : z. B. für Ihren Browser, Musik-Player, Libreoffice, IM-Client usw. Dies sind die Prozesse, die keine Sitzungsleiter sind.
Ich dachte, ich wüsste die Antwort darauf, aber ich habe ein C-Programm geschrieben, 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
ein paar verschiedenen Methoden kompiliert , um zu sehen, was passiert:
./sid
nohup ./sid > sid.out
setsid ./sid
Ich war ein bisschen überrascht von dem, was Linux (2.6.39) zurückgegeben hat. Ich habe auch die Manpage "credentials" in Abschnitt 7 gefunden.
Mein Rat ist, dies zu tun man 7 credentials
(oder das Äquivalent, wenn nicht unter Linux) und den Abschnitt über Prozessgruppen und Sitzungen zu lesen, um zu sehen, ob Sie es herausfinden können.
./sid
und nohup ./sid
, wenn Sie ausgeführt werden setsid ./sid
, ist die Sitzungs-ID (SID) brandneu und entspricht der Prozess-PID ... I ' Ich bin mir nicht sicher, warum Nohup die Gabelung verhindert hat (oder zu verhindern scheint), aber ich glaube, ich habe die allgemeine Idee ...
ps xao pid,ppid,pgid,sid,comm
diese Option, um diese IDs anzuzeigen.