これはLinuxカーネルの機能によるものです。プロセスには2つの異なる名前があります。
- 名前の1つは、実行可能ファイルへのパスの最後のコンポーネントです。たとえば
native_executable
、アプリケーションがにある場合など/data/apps/com.example.hello/native_executable
です。Name
これは、のフィールドに表示される名前です/proc/PID/status
。カーネルはそれを15文字に切り捨てるので、この場合はが含まれますnative_executab
。
- もう1つの名前は、アプリケーションをコマンドラインパラメーター#0(
argv[0]
C、args[0]
Java)として呼び出すプログラムによって渡されます。これは、の先頭に表示され、表示される名前/proc/PID/cmdline
ですps
。
- 実行可能ファイルへのパスは、シンボリックリンクのターゲットでもあり
/proc/PID/exe
ます。
慣例により、プログラムが別のプログラムを起動するときは、実行可能ファイルの名前をコマンドラインパラメータ0として使用する必要がありますが、そうでない場合もあります。のName
フィールドは、/proc/PID/status
常にカーネルによって実行可能ファイルの(切り捨てられた)名前に設定されます。
これは一般的なLinuxの機能です。プロセスの名前にスペースが埋め込まれている場合、標準ツールを使用してプロセスのフルネームを取得できますか?も参照してください。AskUbuntuで。
アプリケーション自体は、後で両方の名前を変更できます(長さの制約はありますが)。Dalvikはこの機能を使用して、アプリケーションを区別します。すべてのアプリケーションは、同じネイティブ実行可能ファイルに由来します/sytem/bin/app_process
。それらをすべて呼び出すのではなくapp_process
、VMは両方の名前をアプリケーションパッケージ名に変更します。の名前は/proc/PID/status
15文字に制限されているため、切り捨てられます。から長い名前を取得できます/proc/PID/cmdline
(最初のヌルバイトまで読み取ります)。