一般化する
mirage
shebangで始まる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
。