Linuxはプロセスの/proc/PID/stat "name"をどのように決定しますか?

Linuxはプロセスの/proc/PID/stat

現在、私のコンピュータにはスクリプトを実行する5つのプロセスがありますが、pythonLinuxでは2つのプロセスしか実行していないと思います。名前 python(/proc/$pid/stat に従って)。言い換えればpgrep -af python

1784 /usr/bin/python -Es /usr/sbin/foo
2306 /usr/bin/python /usr/bin/bar
16964 /usr/bin/python /usr/bin/terminator --geometry=1400x1000
24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main

代わりに、pgrep -a python以下のみが表示されます。

24137 python /home/me/bin/baz.py --arg 70000
25760 python2 -m guake.main

ここにいる名前Linuxは次のプロセスを提供します。

% for pid in $(pgrep -f python); do cut -d' ' -f2 /proc/$pid/stat; done
(foo)
(bar)
(/usr/bin/termin)
(python)
(python2)

pythonもしそうなら、Linuxはスクリプト名がプロセスかどうかをどのように決定しますか?名前?そしてなぜfooそうbarなるのか名前プロセスはいつterminatorフルパスを取得しますか?

通話方法が重要だと思います。これら3つのプログラムがどのように呼び出されるかはわかりませんが、その機能は次のとおりです。

/usr/sbin/foo: #!/usr/bin/python -Es
/usr/bin/bar: #!/usr/bin/python
/usr/bin/terminator: #!/usr/bin/python

これは間違いなくshebangを使用して呼び出されます。

/home/me/bin/baz.py: #!/usr/bin/env python

Guake は Bash スクリプトから次のように起動します。

exec /usr/bin/env python2 -m guake.main "$@" </dev/null >/dev/null 2>&1 &

私の無邪気な推測は、これが/usr/bin/envそれに続く単語をプロセスにするということです。名前しかし、まだやるべきことがたくさんあると思います。 (それでも、どのようにそれを割り当てますか?名前? )

ベストアンサー1

Linuxによって異なります。

プログラムが別のプログラムを起動するときは、実行可能ファイル名をコマンドライン引数$ 0として使用する必要がありますが、そうしない場合があります。このフィールドはName常に/proc/PID/statusカーネルによって実行可能ファイル名に設定されます(ただし15文字に切り捨てられます)。

アプリケーション自体で名前を変更できます。ここでより長い名前を得ることができます/proc/PID/cmdline(最初のNULLバイトまで読み取られます)。

おすすめ記事