Yanıtlar:
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.
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.
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.
./sid
ve nohup ./sid
ve ç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 ...
ps xao pid,ppid,pgid,sid,comm
Bu kimlikleri görüntülemek için kullanın .