Відповіді:
У Linux кожен процес має декілька ідентифікаторів, пов'язаних з ним, включаючи:
Ідентифікатор процесу (PID)
Це довільне число, що ідентифікує процес. Кожен процес має унікальний ідентифікатор, але після того, як процес завершиться і батьківський процес отримав статус виходу, ідентифікатор процесу буде звільнений для повторного використання новим процесом.
Ідентифікатор батьківського процесу (PPID)
Це лише PID процесу, який розпочав процес, про який йде мова.
Ідентифікатор групи процесів (PGID)
Це лише PID лідера групи процесів. Якщо PID == PGID, то цей процес є лідером групи процесів.
Ідентифікатор сесії (SID)
Це лише PID лідера сеансу. Якщо PID == SID, то цей процес є лідером сеансу.
Сесії та групи процесів - це лише способи трактування низки суміжних процесів як одиниці. Усі члени групи процесів завжди належать до одного сеансу, але сесія може мати декілька груп процесів.
Зазвичай оболонка буде лідером сеансу, і кожен конвеєр, виконаний цією оболонкою, буде групою процесів. Це робиться для того, щоб легко вбити дітей снарядом, коли він виходить. (Дивіться вихід (3) для деталей горі.)
Я не думаю, що існує специфічний термін для члена сесії або групи процесів, який не є лідером.
Ведучий сесії - це процес, коли id сесії == ідентифікатор процесу. Це звучить надумано, але ідентифікатор сеансу успадковується дочірніми процесами. Деякі операції в UNIX / Linux працюють на сеансах процесу, наприклад, відкидаючи ідентифікатор процесу при відправці на виклик або команду kill. Найбільш поширене для цього використання при виході з оболонки. ОС надішле kill -HUP -$$
, яка надішле сигнал SIGHUP (зависання) всім процесам з тим же ідентифікатором сеансу, що і оболонка. Коли ви відхилили процес, ідентифікатор сеансу процесу змінюється з оболонки, тому він не реагуватиме на сигнал зависання. Це одна частина процесу перетворення демона.
Більшість процесів, викликаних у вікні / графічному середовищі, мають той самий ідентифікатор сесії, що і одна із програм запуску. Це дозволяє операційній системі виконувати однакові kill -HUP -$$
операції у всіх програмах: наприклад, у вашому браузері, музичному плеєрі, libreoffice, клієнті чату тощо. Це процеси, які не є лідерами сеансів.
Я думав, що знаю відповідь на це, але написав програму С, щоб розібратися в цьому.
#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
я провів його декількома різними способами, щоб побачити, що відбувається:
./sid
nohup ./sid > sid.out
setsid ./sid
Я був здивований тим, що Linux (2.6.39) повернувся. Я також знайшов підручник на розділі 7, "облікові дані".
Моя порада - це зробити man 7 credentials
(або еквівалент, якщо не в Linux), і прочитати розділ про групу процесів і сеанс, щоб побачити, чи можете ви це загадувати.
./sid
і nohup ./sid
, і при запуску setsid ./sid
, то ідентифікатор сеансу (SID) є новим і так само , як процес PID ... I » я не впевнений, чому nohup завадив вилці (або здається), але я думаю, що я маю загальне уявлення ...
ps xao pid,ppid,pgid,sid,comm
для перегляду цих ідентифікаторів.