it-swarm-id.com

Apa yang dimaksud dengan "pemimpin sesi" di `ps`?

Apa yang dimaksud dengan pemimpin sesi, seperti dalam ps -d yang memilih semua proses kecuali pemimpin sesi?

83
its_me

Di Linux, setiap proses memiliki beberapa ID yang terkait dengannya, termasuk:

  • ID Proses (PID)

    Ini adalah angka arbitrer yang mengidentifikasi proses. Setiap proses memiliki ID unik, tetapi setelah proses keluar dan proses induk telah mengambil status keluar, ID proses dibebaskan untuk digunakan kembali oleh proses baru.

  • ID Proses Induk (PPID)

    Ini hanya PID dari proses yang memulai proses tersebut.

  • ID Grup Proses (PGID)

    Ini hanya PID dari pemimpin grup proses. Jika PID == PGID, maka proses ini adalah pemimpin grup proses.

  • ID Sesi (SID)

    Ini hanya PID dari ketua sesi. Jika PID == SID, maka proses ini adalah pemimpin sesi.

Sesi dan kelompok proses hanyalah cara untuk memperlakukan sejumlah proses terkait sebagai satu unit. Semua anggota grup proses selalu menjadi bagian dari sesi yang sama, tetapi sesi mungkin memiliki beberapa grup proses.

Biasanya, Shell akan menjadi pemimpin sesi, dan setiap pipa yang dieksekusi oleh Shell akan menjadi grup proses. Ini untuk memudahkan membunuh anak-anak Shell ketika keluar. (Lihat keluar (3) untuk detail berdarah.)

Saya tidak berpikir ada istilah khusus untuk anggota sesi atau kelompok proses yang bukan pemimpin.

87
cjm

Pemimpin sesi adalah proses di mana id sesi == proses id. Ini terdengar dibuat-buat, tetapi id sesi diwarisi oleh proses anak. Beberapa operasi dalam UNIX/Linux beroperasi pada sesi proses, misalnya, meniadakan id proses ketika mengirim ke panggilan sistem atau perintah kill. Penggunaan paling umum untuk ini adalah ketika keluar dari Shell. OS akan mengirim kill -HUP -$$, yang akan mengirim sinyal SIGHUP (hangup) ke semua proses dengan id sesi yang sama dengan Shell. Ketika Anda menolak suatu proses, id sesi proses diubah dari Shell, sehingga tidak akan menanggapi sinyal hangup. Ini adalah salah satu bagian dari proses untuk menjadi proses daemon.

Sebagian besar proses yang dipanggil dari window manager/environment grafis memiliki id sesi yang sama dengan salah satu program startup. Ini memungkinkan OS untuk melakukan hal yang sama kill -HUP -$$ operasi pada semua program: seperti browser Anda, pemutar musik, libreoffice, klien IM, dll. Ini adalah proses yang bukan pemimpin sesi.

24
Arcege

Saya pikir saya tahu jawabannya, tapi saya menulis sebuah program C untuk mencari tahu.

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

Saya mengkompilasinya dengan cc -g -o sid sid.c Saya menjalankan beberapa cara berbeda, untuk melihat apa yang terjadi:

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

Saya agak terkejut dengan apa yang diberikan Linux (2.6.39) kembali. Saya juga menemukan halaman manual bagian 7, "kredensial".

Saran saya adalah melakukan man 7 credentials (atau yang setara jika tidak di Linux), dan baca bagian tentang grup proses dan sesi untuk melihat apakah Anda dapat memecahkannya.

13
Bruce Ediger