Зачем добавлять круглые скобки вокруг имени процесса?

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)кажется странным названием для процесса. Читая этот форум , я вижу, что это имя специально установлено systemd. В исходном коде мы видим

/* 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?).
Кос
Я изменил свой вопрос с учетом вашего замечания.
Ортомала Локни
Извините, я не поняла, что вы говорите о скобках. Честно говоря, я не знаю: в соответствии с этим ps заключает учетное имя процесса в круглые скобки и печатает, что, если отображаемый процесс был переименован, если psне удается найти процесс по его первоначальному имени, однако это, конечно, не объясняет , почему это делается в pamисходном коде «S, который не имеет ничего общего с ps.
Кос
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, т. Е. Показанное «top»), что означает, что мы должны усечь. Мы отсекаем начало строки, так как обычно суффикс более интересен (в противном случае все различные службы 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.

Скобки, вероятно, должны указывать на это.

intelfx
источник
Знаете ли вы, есть ли другие процессы, использующие такое же соглашение, и является ли это стандартным соглашением?
Ортомала Локни
@ OrtomalaLokni: я не знаю каких-либо соглашений для именования таких процессов. Однако это не значит, что здесь нет соглашений.
intelfx