Ps`de “oturum liderleri” nedir?


78

Oturum liderleri ps -ddışında, oturum liderleri dışındaki tüm süreçleri seçtiği için nelerdir?

Yanıtlar:


84

Linux'ta her sürecin kendisiyle ilişkili birkaç kimliği vardır:

  • İşlem Kimliği (PID)

    Bu, işlemi tanımlayan isteğe bağlı bir sayıdır. Her işlem benzersiz bir kimliğe sahiptir, ancak işlem çıktıktan ve ana işlem çıkış durumunu aldıktan sonra, işlem kimliği yeni bir işlem tarafından yeniden kullanılmak üzere serbest bırakılır.

  • Ana İşlem Kimliği (PPID)

    Bu, söz konusu işlemi başlatan işlemin sadece PID'sidir .

  • İşlem Grubu Kimliği (PGID)

    Bu, işlem grubu liderinin yalnızca PID'sidir . PID == PGID ise, o zaman bu süreç bir süreç grubu lideridir.

  • Oturum Kimliği (SID)

    Bu, oturum liderinin yalnızca PID'sidir. PID == SID ise, bu işlem bir oturum lideridir.

Oturumlar ve süreç grupları, bir dizi ilgili süreci bir ünite olarak ele almanın yalnızca bir yoludur. Bir işlem grubunun tüm üyeleri her zaman aynı oturuma aittir, ancak bir oturumda birden fazla işlem grubu olabilir.

Normal olarak, bir kabuk bir oturum lideri olacak ve bu kabuk tarafından yürütülen her boru hattı bir süreç grubu olacaktır. Bu, çıktıklarında bir kabuğun çocuklarını öldürmeyi kolaylaştırmak içindir. ( Kanyon detayları için (3) numaralı çıkışa bakınız.)

Lider olmayan bir oturum veya işlem grubunun bir üyesi için özel bir terim olduğunu sanmıyorum.


5
Not: ps xao pid,ppid,pgid,sid,commBu kimlikleri görüntülemek için kullanın .
Mike R

1
Neden insanlar bu kadar açıklayıcı gerçek dünya karşılaştırma temelli cevapları
vermiyorlar

24

Bir oturum lideri, oturum kimliğinin == işlem kimliğinin olduğu bir işlemdir. Bu kulağa hoş geliyordu, ancak oturum kimliği çocuk işlemleriyle miras kaldı. UNIX / Linux içindeki bazı işlemler, örneğin, kill sistem çağrısı veya komutuna gönderilirken işlem kimliğini reddederek işlem oturumlarında çalışır. Bunun için en yaygın kullanım, kabuktan çıkış yapılmasıdır. İşletim sistemi kill -HUP -$$, kabuk ile aynı oturum kimliğine sahip tüm işlemlere bir SIGHUP (hangup) sinyali gönderecek. Bir işlemi reddettiğinizde, işlemin oturum kimliği kabuktan değiştirilir, bu nedenle kapatma sinyaline yanıt vermez. Bu bir daemon süreci olma sürecinin bir parçasıdır.

Pencere yöneticisinden / grafik ortamından çağrılan işlemlerin çoğu, başlangıç ​​programlarından biriyle aynı oturum kimliğine sahiptir. Bu, işletim sisteminin kill -HUP -$$tüm programlarda aynı işlemi yapmasına izin verir : tarayıcınız, müzik çalarınız, libreoffice, IM istemcisi, vb. Gibi. Bunlar, oturum lideri olmayan işlemlerdir.


Lütfen umursamıyorum ama biraz daha fazla açıklığa ihtiyacım olabilir - - oturum lideri birdir, diğerleri ne denir ve nasıllar (davranış, Oturum Lideri'nden ne yaparlar?)?
its_me

Onlar oturumun üyesi denir, inanıyorum.
Arcege

Açıklamanızı seviyorum ama hala bir noktayı kaçırıyorum: IIUC, herhangi bir zamanda başlattığım her işlem aslında giriş yaptığım kabuğun çocuğu (elbette reddetmediysem). İşletim sistemi neden işlem ağacında yürüyüp bu işlemin tüm kardeşlerini ve kardeşlerini öldürmedi? (Aslında her zaman düşündüğüm şeydi ... bugüne kadar: D) Peki, bunun yerine oturumları kullanmanın mantığı ne?
Alois Mahdal

Bir sürecin ne zaman artık orijinal oturumun bir parçası olmadığına karar vermekten uzak durmanız gerekir (örneğin, giriş kabuğu veya arka plan programı). Bir düşünce, PPID'yi (ana pid) otomatik olarak 1 olarak değiştirmek olabilir, ancak bu işlem ağacını bozar. Yeni bir oturum kimliği, birlikte bir sinyal gönderilebilecek bir grup oluşturur. Bunun bir örneği GUI'dir, firefox'u ayrı bir oturum olarak kapatın. Ardından, [X] düğmesine basıldığında, firefox'un oturumu ve çocukları için bir sinyal gönderin, ancak pencere yöneticisi etkilenmedi - bunu düz PPID-PID ilişkilerinde yapamadı.
Arcege,

GUI öldüğünde, oturum grubu değil, tüm işlem ağacı sinyali alabilir. İstenen iki farklı davranış: bir 'uygulamanın' öldürülmesi (firefox ve eklentilerini öldür), tüm alt süreçlerin öldürülmesi (bir gui'den çıkma). Emacs ve krom ile benzer çalışmalar bekliyorum.
Arcege,

13

Bunun cevabını bildiğimi sanıyordum, ama bunu çözmek için bir C programı yazdım.

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

İle bunu derlenmiş cc -g -o sid sid.c ben o ne olacağını görmek için birkaç farklı yol, ran:

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

Linux'un (2.6.39) geri verdiği şeyden şaşırmıştım. Ayrıca "kimlik bilgileri" bölüm 7 man sayfasını da buldum.

Tavsiyem yapmak man 7 credentials(ya da Linux'ta değilse) ve bunu çözüp çözemeyeceğinizi görmek için süreç grubu ve oturum hakkındaki bölümleri okumaktır.


1
Linux acemi olarak, ne dediğini çözemedim. Sen de şaşkın gibi görünüyorsun? Fakat Arcege'nin cevabının ne anlama geldiğini anlayacak kadar bilgili olabilirsin. Yaparsanız, lütfen aynısını daha net bir şekilde açıklayabilir misiniz?
its_me

İlginç ... teşekkürler ... Öyleyse, oturum kimliği (SID) terminalin PID'si içindir ./sidve nohup ./sidve çalıştırdığınızda setsid ./sid, oturum kimliği (SID) yepyenidir ve PID işlemiyle aynıdır ... I ' Nohup'un neden çatalı (veya öyle görünüyor) önlediğinden emin değilim, ama genel bir fikrim var sanırım ...
Peter.O
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.