アプリを実行しているプロセスIDとプロセス名

投稿日:  更新日:

Androidアプリを実行しているプロセスIDとプロセス名をプログラムで調べる方法を紹介します。

スポンサーリンク

プロセスとは

Android(ベースはLinux)はマルチタスクのOS(Operating System)です。

ここでいうタスクはOS上で実行されているプログラムのことを示しています。

従って、マルチタスクとは複数(マルチ)のプログラム(タスク)を同時に実行できるという意味です。

しかし、「複数を同時に実行できる」といっても、リソース(CPU、メモリー、センサーなどのコンピュータ資源)は端末上に限られた数や量しかありません。

ですので、OSはリソースを分割してプログラム毎に割り当てます。

このリソースを割り当てる単位がプロセスです。

「プログラム毎≒リソースの割り当て単位≒プロセス」になるので、「プログラムの実行単位がプロセスである」と語られる場合もあります。

「adb shell ps」コマンドを用いればOS内に存在するプロセスの一覧が見られます。多くのプロセスの存在を確認できると思います。

# ps
USER      PID   PPID  VSIZE  RSS   WCHAN            PC  NAME
root      1     0     8232   1468  SyS_epoll_ b1fcf424 S /init
root      2     0     0      0       kthreadd 00000000 S kthreadd
root      3     2     0      0     smpboot_th 00000000 S ksoftirqd/0
root      5     2     0      0     worker_thr 00000000 S kworker/0:0H
...
u0_a50    12723 1345  1109968 33652 SyS_epoll_ af07d424 S com.android.printspooler
u0_a1     12759 1345  1117292 43096 SyS_epoll_ af07d424 S android.process.acore
u0_a26    27425 1345  1117116 37196 SyS_epoll_ af07d424 S com.android.calendar
u0_a2     27439 1345  1113156 36752 SyS_epoll_ af07d424 S com.android.providers.calendar
u0_a40    27670 1345  1116820 35016 SyS_epoll_ af07d424 S com.android.gallery3d
system    27687 1345  1108720 35352 SyS_epoll_ af07d424 S com.android.keychain
u0_a48    27703 1345  1108004 31380 SyS_epoll_ af07d424 S com.svox.pico
...
root      30323 30150 6264   1404           0 b5615424 R ps

OS(Android)上でプログラムを実行しようとした場合は、必ずこのプロセスが作成されて、その中でプログラムが実行されます。

OSはこのプロセスを管理するためにプロセスID(PID)という番号を付けています。また、プロセスIDに関連付けられたプロセス名を持ちます。

Androidの場合、プロセス名はアプリ名(パッケージ名を伴った)になるのが普通です。

スポンサーリンク

プロセスIDとプロセス名を調べるプログラム

プロセスIDとプロセス名を調べるプログラムは次のようになります。

KotlinJava
class SysInfo {

    companion object Utility {

        fun logProcess(context: Context, tag: String): Unit {
            val procId = Process.myPid()
            var procName = ""
            val manager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
            for (procInfo in manager.runningAppProcesses) {
                if (procInfo.pid == procId) {
                    procName = procInfo.processName
                    break
                }
            }
            Log.i(tag, "Process = %s(%d)".format(procName, procId))
        }
    }
}
public class SysInfo {

    public static void logProcess(Context context, String tag) {
        int _ProcId = Process.myPid();
        String _ProcName = "";
        ActivityManager _Manager
                = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
        for (RunningAppProcessInfo _ProcInfo: _Manager.getRunningAppProcesses()) {
            if (_ProcInfo.pid == _ProcId) {
                _ProcName = _ProcInfo.processName;
                break;
            }
        }
        Log.i(tag, String.format("Process = %s(%d)", _ProcName, _ProcId));
    }
}

自身を実行しているプロセスIDはProcessクラスが持っています。プロセス名はActivityManagerが持つプロセスの情報からプロセスIDを頼りに探します。

プログラムの実行結果は次のようになりました。

KotlinJava
package com.example.android.myapp
...
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
		...
        // --- プロセス確認
        logProcess(this, "Main")
    }
}
package com.example.android.myapp
...
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
		...
        // --- プロセス確認
        logProcess(this, "Main")
    }
}
I/Main: Process = com.example.android.myapp(30031)

プロセスIDはプロセスが作成された時点でOSが付けます。同じプログラムでも作成された時点が異なれば違う番号になります。

スポンサーリンク

関連記事:

Androidアプリを実行しているスレッドIDとスレッド名をプログラムで調べる方法を紹介します。 ...
Android OSはマルチユーザーのOSです。 マルチユーザーとは一台の携帯端末を複数のユーザーで切り替えて使うことです。 マルチユーザーについてまとめます。 ...
スポンサーリンク