返回

把握进程线程,透视Android系统运行

Android

Android操作系统是当今最流行的移动操作系统之一,为用户提供了丰富多样的功能和服务。为了确保系统的流畅和稳定运行,Android系统内部采用了多进程和多线程的架构设计。其中,进程是系统中运行的独立程序,而线程则是进程中的一个执行单元。

在Android系统中,存在着许多重要的进程和线程,它们负责着各种各样的系统功能和服务。为了方便大家对系统中的进程线程有一个直观的感受,本文将通过几个简单的shell命令来查看系统中的进程和线程。

查看进程

要查看系统中的进程,我们可以使用以下命令:

adb shell ps

该命令将列出系统中的所有进程,包括应用程序进程和系统进程。我们可以通过以下字段来查看进程的信息:

  • PID:进程的ID号
  • PPID:父进程的ID号
  • USER:进程的所有者
  • NI:进程的优先级
  • VIRT:进程占用的虚拟内存大小
  • RES:进程占用的物理内存大小
  • SHR:进程占用的共享内存大小
  • S:进程的状态
  • UTIME:进程在用户态的时间
  • STIME:进程在内核态的时间
  • COMMAND:进程的命令行

例如,以下输出显示了系统中的前10个进程:

root@android:/ # adb shell ps
PID   PPID  USER   S   %CPU %MEM    VSZ    RSS   WCHAN  PC   NAME
226   1     root   S   0.0  0.1   11012   3768   -       98a04b88 S android.system.suspend
350   1     root   S   0.0  0.1   10636   3852   -       989b29c4 S android.kernel.taskprocd
188   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
189   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
213   1     root   S   0.0  0.0   6412    2188   -       989a9064 S com.google.android.gms.a
214   213   root   S   0.0  0.0   3884    1520   -       989a9a6c S com.google.android.gms
215   213   root   S   0.0  0.0   3884    1520   -       989a9a6c S com.google.android.gms
216   213   root   S   0.0  0.0   3884    1520   -       989a9a6c S com.google.android.gms
217   213   root   S   0.0  0.0   3884    1520   -       989a9a6c S com.google.android.gms
218   213   root   S   0.0  0.0   3884    1520   -       989a9a6c S com.google.android.gms

从输出中,我们可以看到每个进程的PID、PPID、USER、NI、VIRT、RES、SHR、S、UTIME、STIME和COMMAND等信息。我们可以通过这些信息来分析进程的运行情况。

查看线程

要查看系统中的线程,我们可以使用以下命令:

adb shell ps -t

该命令将列出系统中的所有线程,包括应用程序线程和系统线程。我们可以通过以下字段来查看线程的信息:

  • PID:线程的ID号
  • TID:线程的TID号
  • PPID:父进程的ID号
  • USER:线程的所有者
  • NI:线程的优先级
  • VIRT:线程占用的虚拟内存大小
  • RES:线程占用的物理内存大小
  • SHR:线程占用的共享内存大小
  • S:线程的状态
  • UTIME:线程在用户态的时间
  • STIME:线程在内核态的时间
  • COMMAND:线程的命令行

例如,以下输出显示了系统中的前10个线程:

root@android:/ # adb shell ps -t
PID   TID   PPID USER   S   %CPU %MEM    VSZ    RSS   WCHAN  PC   NAME
226   226   1     root   S   0.0  0.1   11012   3768   -       98a04b88 S android.system.suspend
350   350   1     root   S   0.0  0.1   10636   3852   -       989b29c4 S android.kernel.taskprocd
188   188   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   190   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   191   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   192   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   193   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   194   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   195   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess
188   196   1     system  S   0.0  0.0   4456    2024   -       989a9a38 S android.bg.subprocess

从输出中,我们可以看到每个线程的PID、TID、PPID、USER、NI、VIRT、RES、SHR、S、UTIME、STIME和COMMAND等信息。我们可以通过这些信息来分析线程的运行情况。

小结

通过本文介绍的几个简单的shell命令,我们可以查看系统中的进程和线程,并对它们的运行情况有一个直观的感受。这些信息对于我们后续再进一步的分析各大服务的源码非常有帮助。