追加読書

追加読書

一般化する

mirageshebangで始まるPythonプログラムを例にしてみましょう。

#!/usr/bin/python
...

見たり/proc/<pid>/comm使ったりするpgrep姿は…

...shebangを介して呼び出すと、プロセス名は "mirage"です。

/usr/bin/mirage &

...しかし、明示的にPythonを呼び出すと「python」になります。

/usr/bin/python /usr/bin/mirage &
  • プロセスが自分の名前を変更できることを知っていますが、2つのケースの名前が異なるのはなぜですか?
  • /procプロセスが最初に始まる方法(単に使用またはgrep情報を使用)を理解する一般的な方法はありますか?

詳細 - シェボン

/home/martin> /usr/bin/mirage &
[1] 22638

/proc/<pid>/commそれを「蜃気楼」と呼んでください。

/home/martin> cat /proc/22638/comm 
mirage

パッケージ「蜃気楼」であることが確認されましたが、「Python」ではありません。

/home/martin> pgrep -al mirage && echo "found" || echo "not found"
22638 /usr/bin/python /usr/bin/mirage
found

/home/martin> pgrep -al python && echo "found" || echo "not found"
not found

詳細 - Python

/home/martin> /usr/bin/python /usr/bin/mirage &
[1] 21348

/proc/<pid>/comm「Python」と呼んでください

/home/martin> cat /proc/21348/comm 
python

パッケージ「python」ですが、「mirage」ではないことがわかりました。

/home/martin> pgrep -al mirage && echo "found" || echo "not found"
not found

/home/martin> pgrep -al python && echo "found" || echo "not found"
21348 /usr/bin/python /usr/bin/mirage
found

ベストアンサー1

プロセス名はargv[0]呼び出しから派生しますexecv()

これは観察された動作を説明します。

実際、shebangの場合、カーネルはベクトルに影響を与えずに呼び出される方法を並べ替えますargv

おすすめ記事