web-dev-qa-db-ja.com

プロセス名を括弧で囲むのはなぜですか?

私のマシンでは( 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)は、プロセスの奇妙な名前のようです。これを読むと forum ですが、この名前はsystemdによって意図的に設定されていることがわかります。 source code

/* 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]

20
Ortomala Lokni

名前を括弧で囲むことは、このプロセスに特別な何かがあることを示しているようです

2つのケースがあります。

  • (...)

PID 1がサービスバイナリを開始すると、最初にプロセスを分岐し、次にサービス構成に従ってプロセスのパラメーターを調整し、最後にexecve()を呼び出して実際のサービスプロセスを実行します。 forkとexecの間の時間に、PR_SET_NAMEを使用してプロセスの名前を開始される名前に変更し、これを開始される最終的なサービスに簡単にマッピングできるようにします。ただし、「通信」名(つまり、PR_SET_NAMEで設定できるプロセス名、つまり「トップ」が表示するプロセス名)には厳密なサイズ制限があるため、切り捨てる必要があることに注意してください。通常は接尾辞の方が興味深いので、文字列の先頭を削除します(そうしないと、systemdのさまざまなサービスはすべて「(systemd-)」と表示されますが、これは特に便利ではありません)。名前が()で囲まれているのは、これが最終的に指定されたプロセスになるプロセスであることを明確にするためですが、まだではありません。

https://lists.freedesktop.org/archives/systemd-devel/2016-April/036322.html を参照してください

  • (sd-pam)は特殊なケースです

空でない 'PAMName ='でユニットを生成する場合、子プロセスinsideをフォークして、セッションを監視する '(sd-pam)'と呼ばれるユニットを作成します。メインプロセスが終了するのを待ってから、pam_close_session(3)を介して終了します。

16

/ bin/psで見た目がきれいで、名前としてsd-pamだけでなく(sd-pam)を選択する理由は何ですか?名前を括弧で囲むことは、このプロセスに特別な何かがあることを示しているようです

はい、特別なものがあります。これは架空の名前であり、notは既存のバイナリの名前です。つまり、「sd-pam」ファイルはどこにもありません。このプロセスはPID 1の分岐です。

括弧はおそらくこれを示すためのものです。

5
intelfx