it-swarm-tr.com

Ps'de "oturum liderleri" nedir?

Oturum liderleri hariç tüm süreçleri seçen ps -d Oturumlarında olduğu gibi oturum liderleri nelerdir?

83
its_me

Linux'ta, her işlemin kendisiyle ilişkili birkaç kimliği vardır:

  • İşlem Kimliği (PID)

    Bu, işlemi tanımlayan rastgele bir sayıdır. Her işlemin benzersiz bir kimliği vardır, ancak işlem çıktıktan ve üst 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.

  • Üst Süreç Kimliği (PPID)

    Bu sadece söz konusu işlemi başlatan sürecin PID'sidir.

  • İşlem Grubu Kimliği (PGID)

    Bu sadece süreç grubu liderinin PID'si. PID == PGID ise, bu işlem bir süreç grubu lideridir.

  • Oturum Kimliği (SID)

    Bu sadece oturum liderinin PID'si. PID == SID ise, bu işlem bir oturum lideridir.

Oturumlar ve süreç grupları, bir takım ilgili süreçleri bir birim olarak ele almanın yollarından biridir. Bir süreç grubunun tüm üyeleri her zaman aynı oturuma aittir, ancak bir oturumda birden çok işlem grubu olabilir.

Normalde, bir Kabuk bir oturum lideri olur ve bu Kabuk tarafından yürütülen her boru hattı bir süreç grubu olur. Bu, bir Shell'in çıkışında çocuklarını öldürmeyi kolaylaştırmak içindir. (Kanlı detayları için çıkış (3) konusuna bakın.)

Bir oturumun veya süreç grubunun bir üyesi için lider olmayan özel bir terim olduğunu düşünmüyorum.

87
cjm

Oturum lideri, oturum kimliği == işlem kimliğinin olduğu bir işlemdir. Bu kulağa hoş geliyor, ancak oturum kimliği alt süreçler tarafından miras alınır. UNIX/Linux içindeki bazı işlemler, örneğin kill sistem çağrısına veya komutuna gönderilirken işlem kimliğini ortadan kaldırarak işlem oturumlarında çalışır. Bunun en yaygın kullanımı bir Kabuk oturumunun kapatılmasıdır. İşletim sistemi kill -HUP -$$, Kabuk ile aynı oturum kimliğine sahip tüm işlemlere bir SIGHUP (hangup) sinyali gönderir. Bir işlemi reddettiğinizde, işlemin oturum kimliği Kabuktan değiştirilir, bu nedenle askıda kalma 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 aynı kill -HUP -$$ tüm programlarda operasyon: tarayıcınız, müzik çalar, libreoffice, IM istemcisi, vb gibi Bunlar oturum lideri olmayan süreçlerdir.

24
Arcege

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

cc -g -o sid sid.c İle derledim, neler olduğunu görmek için birkaç farklı yolla çalıştırdım:

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

Linux'un (2.6.39) verdiği şey beni şaşırttı. Ayrıca bölüm 7 kılavuz sayfasını, "kimlik bilgilerini" buldum.

Benim tavsiyem man 7 credentials (Ya da Linux'ta değilse eşdeğeri) yapmak ve bunu çözüp çözemeyeceğinizi görmek için süreç grubu ve oturum hakkındaki bölümü okumaktır.

13
Bruce Ediger