現在、私のコンピュータにはスクリプトを実行する5つのプロセスがありますが、python
Linuxでは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バイトまで読み取られます)。