web-dev-qa-db-fra.com

Que sont les "chefs de session" dans `ps`?

Que sont les chefs de session, comme dans ps -d qui sélectionne tous les processus à l'exception des chefs de session?

83
its_me

Sous Linux, chaque processus est associé à plusieurs ID, notamment:

  • ID de processus (PID)

    Il s'agit d'un nombre arbitraire identifiant le processus. Chaque processus a un ID unique, mais une fois le processus terminé et le processus parent a récupéré l'état de sortie, l'ID de processus est libéré pour être réutilisé par un nouveau processus.

  • ID de processus parent (PPID)

    Il s'agit simplement du PID du processus qui a démarré le processus en question.

  • ID de groupe de processus (PGID)

    Ce n'est que le PID du responsable du groupe de processus. Si PID == PGID, alors ce processus est un chef de groupe de processus.

  • ID de session (SID)

    Ceci est juste le PID du chef de session. Si PID == SID, alors ce processus est un chef de session.

Les sessions et les groupes de processus ne sont que des moyens de traiter un certain nombre de processus connexes comme une unité. Tous les membres d'un groupe de processus appartiennent toujours à la même session, mais une session peut avoir plusieurs groupes de processus.

Normalement, un Shell sera un leader de session, et chaque pipeline exécuté par ce Shell sera un groupe de processus. Cela permet de tuer facilement les enfants d'un Shell à sa sortie. (Voir exit (3) pour les détails sanglants.)

Je ne pense pas qu'il y ait un terme spécial pour un membre d'une session ou d'un groupe de processus qui n'est pas le leader.

87
cjm

Un chef de session est un processus dans lequel id session == id processus. Cela semble artificiel, mais l'ID de session est hérité par les processus enfants. Certaines opérations sous UNIX/Linux fonctionnent sur des sessions de processus, par exemple, annulant l'ID de processus lors de l'envoi à l'appel ou à la commande kill system. L'utilisation la plus courante est la déconnexion d'un shell. L'OS enverra kill -HUP -$$, qui enverra un signal SIGHUP (raccrochage) à tous les processus avec le même identifiant de session que le shell. Lorsque vous renoncez à un processus, l'ID de session du processus est modifié à partir du shell, de sorte qu'il ne répondra pas au signal de raccrochage. C'est une partie du processus pour devenir un processus démon.

La plupart des processus appelés depuis le gestionnaire de fenêtres/l'environnement graphique ont le même identifiant de session que l'un des programmes de démarrage. Cela permet au système d'exploitation d'exécuter le même kill -HUP -$$ opération sur tous les programmes: comme votre navigateur, lecteur de musique, libreoffice, client IM, etc. Ce sont des processus qui ne sont pas des leaders de session.

24
Arcege

Je pensais connaître la réponse à cela, mais j'ai écrit un programme C pour comprendre cela.

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

Je l'ai compilé avec cc -g -o sid sid.c Je l'ai exécuté de différentes manières, pour voir ce qui se passe:

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

J'ai été un peu surpris par ce que Linux (2.6.39) a rendu. J'ai également trouvé la page de manuel de la section 7, "Informations d'identification".

Mon conseil est de faire man 7 credentials (ou l'équivalent si ce n'est pas sous Linux), et lisez la section sur le groupe de processus et la session pour voir si vous pouvez l'explorer.

13
Bruce Ediger