Po co dodawać nawiasy wokół nazwy procesu?

19

Na moim komputerze ( testy Debiana ), kiedy to robię

ps aux | grep pam

Otrzymuję

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)wydaje się dziwną nazwą procesu. Czytając to forum , widzę, że ta nazwa jest celowo ustawiona przez systemd. W kodzie źródłowym widzimy

/* 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)");

Co to znaczy wyglądać ładnie /bin/psi dlaczego wybrać, (sd-pam)a nie tylko sd-pamimię? Umieszczenie nawiasów wokół nazwy wydaje się wskazywać, że proces ten ma coś specjalnego jak dla wątku jądra, np [kintegrityd].

Ortomala Lokni
źródło
Co masz na myśli przez „jaki jest cel tego”? To nazwa, być może po prostu przypomina to, co robi (SessionDestroy-PAM?).
ko
Zmodyfikowałem moje pytanie, biorąc pod uwagę twoją uwagę.
Ortomala Lokni
Ach, przepraszam, nie rozumiem, że mówisz o nawiasie. Szczerze mówiąc, nie wiem: zgodnie z tym ps zamyka nazwę księgową procesu w nawiasach i drukuje, że jeśli nazwa procesu, który ma zostać pokazany, zostanie zmieniona, jeśli psnie będzie w stanie znaleźć procesu według jego oryginalnej nazwy, to oczywiście nie wyjaśnia, dlaczego dzieje się to w pamkodzie źródłowym, który nie ma z tym nic wspólnego ps.
ko
1
Może podświadomie przeczytałem komentarz @kos, ale miałem właśnie powiedzieć, że prawdopodobnie nie pozwoli to ludziom na próżno szukać pliku binarnego o nazwie sd-pam. Po przeczytaniu, że ps używa już tej samej składni, co może być celowe. Z pewnością byłyby inne narzędzia do listy procesów, które nie dodają nawiasów. (systemd-cgls ?)
sourcejedi
2
@kos: „sd” najprawdopodobniej oznacza systemd, a nie „zniszczenie sesji”.
intelfx,

Odpowiedzi:

15

Umieszczenie nawiasu wokół nazwy wydaje się wskazywać, że proces ten ma coś specjalnego

Istnieją dwa przypadki:

  • (...)

Kiedy PID 1 uruchamia plik binarny usługi, najpierw rozwidla proces, a następnie dostosowuje parametry procesu zgodnie z konfiguracją usługi i na koniec wywołuje execve (), aby wykonać rzeczywisty proces usługi. W czasie między rozwidleniem a exec używamy PR_SET_NAME, aby zmienić nazwę procesu na to, co ma być uruchomione, aby ułatwić mapowanie tego do ewentualnej uruchomionej usługi. Zauważ jednak, że istnieje ścisły limit rozmiaru dla nazwy „comm” (tj. Nazwa procesu, którą ustawię za pomocą PR_SET_NAME, tj. Ta, którą pokazuje „góra”), co oznacza, że ​​musimy ją obciąć. Odcinamy początek łańcucha, ponieważ zwykle sufiks jest bardziej interesujący (w przeciwnym razie wszystkie różne usługi systemd byłyby wyświetlane jako „(systemd-)” - co nie jest szczególnie przydatne).

Widzieć https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html

  • (sd-pam) jest szczególnym przypadkiem

Jeśli spawnujemy jednostkę z niepustym „PAMName =”, rozwidlamy proces potomny wewnątrz jednostki, znany jako „(sd-pam)”, który obserwuje sesję. Oczekuje na zakończenie głównego procesu, a następnie kończy go przez pam_close_session (3).

Evgeny Vereshchagin
źródło
5

Co to znaczy wyglądać ładnie w / bin / ps i dlaczego wybrać (sd-pam), a nie tylko sd-pam jako nazwę? Umieszczenie nawiasu wokół nazwy wydaje się wskazywać, że proces ten ma coś specjalnego

Tak, ma coś wyjątkowego. To wymyślona nazwa i nie nazwa istniejącego pliku binarnego. Innymi słowy, nigdzie nie ma pliku „sd-pam”; ten proces jest rozwidleniem PID 1.

Nawiasy mają prawdopodobnie to oznaczać.

intelfx
źródło
Czy wiesz, czy istnieją inne procesy wykorzystujące tę samą konwencję i czy jest to konwencja standardowa?
Ortomala Lokni
@OrtomalaLokni: Nie znam żadnej konwencji nazewnictwa takich procesów. Nie oznacza to jednak, że nie ma konwencji.
intelfx,