読む プロセスを囲む括弧はどういう意味ですか? 実行可能ファイル名が出力されることを理解しています。
Linux ps マニュアルページ:
プロセス引数が使用できない場合があります。これが発生すると、psは代わりに実行可能ファイル名を角かっこで囲んで出力します。
ただし、ps -Awwo pid,comm,args
を使用すると、次のようになります。
PID COMMAND COMMAND
1 init init [2]
これは何を意味するのでしょうか? 「実行可能ファイル名」はinit
または[2]
であると想定されていますか?
もちろん、実行可能ファイルはinit
-[2]
とは何ですか?なぜ印刷されるのですか?
(また、実行可能ファイルの名前を知っていると、フルパスを表示できない理由がわかりません。)
comm
列とargs
出力のps
列の最初のワードの両方に、関係者全員がデフォルトの規則に従っている場合、実行可能プログラムの名前が表示されます。ただし、さまざまな理由で不一致が生じる可能性があります。
プログラムが起動すると、args
列に示されているコマンド名が、プログラムを実行する親プログラムによって選択され、引数(argv[0]
)として渡されます。慣例により、親は実行可能ファイルのベース名(つまり、ディレクトリ部分のない実行可能ファイルへのパス)を選択しますが、これは強制されません。プログラムが実行されると、その文字列を上書きできます。
Init(少なくとも従来のLinux SysVinit)は、そのargv[0]
を上書きして、現在の ランレベル を示します。
Linuxでは、comm
列は、カーネルによって、実行可能ファイルのベース名の最初の16文字に最初に入力されます。プロセスは、 prctl
システムコールでコンテンツを変更できます。
実行可能ファイルの名前が変更または削除された場合、comm
列もargs
列もこれを反映しません。
ps
は、実行可能ファイルへのパスを表示しません。これは、ジョブの説明に含まれていません。 lsof
はlsof -a -p 1 -d txt
で教えてくれます。
Linuxでは、この情報は/proc/PID/
のファイルで確認できます。
/proc/1/stat
(括弧内の2番目のフィールド)および/proc/1/status
(comm
フィールド)内のプロセス名(Name
フィールド)。/proc/1/exe
を介した実行可能ファイルへのパス。argv[0]
の引数(/proc/1/cmdline
で始まる)(引数はnullバイトで区切られます)。