Навіщо додавати дужки навколо імені процесу?


19

На моїй машині ( тестування Debian ), коли я це роблю

ps aux | grep pam

Я отримую

orto        609  0.0  0.0  58532  2148 ?        S    08:06   0:00 (sd-pam)  
orto       5533  0.0  0.0  12724  1948 pts/1    S+   16:51   0:00 grep pam

(sd-pam)здається дивною назвою процесу. Читаючи цей форум , я бачу, що це ім’я задано систематично. У вихідному коді ми бачимо

/* The child's job is to reset the PAM session on
 * termination */

/* This string must fit in 10 chars (i.e. the length
 * of "/sbin/init"), to look pretty in /bin/ps */
rename_process("(sd-pam)");

Що означає виглядати симпатичним /bin/psі чому обирати, (sd-pam)а не просто sd-pamяк ім'я? Якщо здати дужки навколо імені, то це свідчить про те, що цей процес має щось особливе, як для потоку ядра, наприклад [kintegrityd].


Що ви маєте на увазі під "якою метою цього робити"? Це ім'я, можливо, воно просто нагадує те, що робить (SessionDestroy-PAM?).
kos

Я змінив своє запитання, враховуючи ваше зауваження.
Ортомала Локні

Ах вибачте, я не зрозумів, що ви говорите про дужки. Чесно кажучи, я не знаю: відповідно до цього ps додається назва облікового запису процесу в дужки і друкується, що якщо процес, який буде показаний, він був перейменований, якщо psвже не в змозі знайти процес за його оригінальною назвою, однак це, звичайно, не пояснює, чому це робиться у pamвихідному коді, який не має нічого спільного ps.
kos

1
Можливо, я підсвідомо читав коментар @kos, але я ось-ось збирався сказати, що, мабуть, уникати людей, які даремно шукають бінарний під назвою sd-pam. Прочитавши, що ps вже використовує той самий синтаксис, це може бути навмисно. Звичайно, існували б інші інструменти для лістингу процесів, які не додають дужки. ( systemd-cgls?)
sourcejedi

2
@kos: "sd", швидше за все, означає "systemd", а не "знищення сеансу".
intelfx

Відповіді:


15

Якщо здати дужки навколо імені, то це свідчить про те, що цей процес має щось особливе

Є два випадки:

  • (...)

Коли PID 1 запускає службовий бінарний файл, він спочатку відкидає процес, потім відрегулює параметри процесу відповідно до конфігурації служби та, нарешті, викликає execve () для виконання фактичного процесу обслуговування. У проміжок часу між форкою та exec ми використовуємо PR_SET_NAME, щоб змінити ім'я процесу на те, що буде розпочато, щоб зробити його зручним для відображення можливої ​​послуги, що розпочалася. Однак зауважте, що в ім'я "comm" є чітке обмеження розміру (тобто ім'я процесу, яке моє встановити за допомогою PR_SET_NAME, тобто одне "верхнє"), що означає, що ми повинні усікати. Ми відсікаємо початок рядка, оскільки зазвичай суфікс цікавіший (інакше всі різні системи systemd видаються як "(systemd-)" - що не особливо корисно).

Дивіться https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html

  • (sd-pam) є особливим випадком

Якщо ми зробимо нересурсовий "PAMName =", ми видалимо дочірній процес всередині блоку, відомий як "(sd-pam)", який спостерігає за сеансом. Він чекає виходу основного процесу, а потім закінчує його через pam_close_session (3).


5

Що означає виглядати досить в / bin / ps і чому вибирати (sd-pam), а не просто sd-pam як ім'я? Якщо здати дужки навколо імені, то це свідчить про те, що цей процес має щось особливе

Так, у ньому є щось особливе. Це сформоване ім'я, а не ім’я будь-якого наявного двійкового файлу. Іншими словами, файл "sd-pam" ніде не існує; цей процес є вилкою PID 1.

Мабуть, для цього вказують дужки.


Чи знаєте ви, чи є інші процеси, що використовують ту саму конвенцію, і чи це стандартна конвенція?
Ортомала Локні

@OrtomalaLokni: Я не знаю жодної конвенції щодо іменування таких процесів. Однак це не означає, що немає конвенцій.
intelfx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.