psのCOMMAND列の「init [2]」はどういう意味ですか?

psのCOMMAND列の「init [2]」はどういう意味ですか?

読むプロセスの周りの括弧はどういう意味ですか?私が知っている限り、実行可能ファイル名が印刷されます。

Linuxメモマニュアルページ:

プロセスパラメータが利用できない場合があります。この場合、psは実行可能ファイル名を括弧内に印刷します。

しかし、ps -Awwo pid,comm,args私は次のようになります。

  PID COMMAND         COMMAND
    1 init            init [2]

どういう意味ですか? 「実行ファイル名」initはまたはでなければなりませんか[2]

実行ファイルはもちろんのようですinit。それは何ですか[2]?なぜ印刷されていますか?

(また、実行可能ファイル名を知っていますが、なぜフルパスを表示できないのかは本当に理解できません。)

答え1

関連するすべての人がデフォルトの規則に従うと、出力列とcomm列の最初の単語の両方がランチャーの名前を表示します。ただし、さまざまな理由で違いが発生する可能性があります。argsps

プログラムが起動すると、その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/

  • (括弧内の2番目のフィールド)とcomm(フィールド)のプロセス名(フィールド)。/proc/1/stat/proc/1/statusName
  • 渡された実行可能ファイルのパス/proc/1/exe
  • (で始まるargv[0])のパラメータ/proc/1/cmdline(ヌルバイトで区切られたパラメータ)

関連情報