【问题标题】:Does each application on Android have a single PID?Android 上的每个应用程序是否都有一个 PID?
【发布时间】:2021-03-31 21:13:36
【问题描述】:

我的理解是 PID 是每个正在运行的应用程序的唯一进程 ID。一个应用程序可以同时运行多个 PID,我们如何从 strace 输出中看到这一点?

【问题讨论】:

标签: android system-calls pid strace


【解决方案1】:

我很惊讶这个 SO 问题没有答案(如果有,我会将此问题标记为“重复”):

Is it possible for an app to have several PID at the same time?

我做了一些实验,据我所知,一个应用可以创建 几个可以执行代码的 ART (AndroidRunTime) 实例 同时。这些实例中的每一个都由相同的 PID 调用,而不是 应用程序。这些 ART 实例中的每一个都可以创建多个线程,并且 这些线程具有应用程序 PID。但是一个应用程序是否有可能拥有 几个PID同时?如果是这种情况,您能否提供一个 例子?

是的,一个 Android 应用程序可以有多个不同的 PID。

来自 Android 文档:

Processes and threads overview

默认情况下,同一个应用程序的所有组件都运行在同一个 进程和大多数应用程序不应该改变这一点。

但它继续说:

但是,您可以在应用程序中安排不同的组件 在单独的进程中运行,您可以创建额外的线程 适用于任何进程。

每种类型的组件元素的清单条目-, , , and — 支持 android:process 可以指定该组件应该在其中的进程的属性 运行....

该元素还支持 android:process 属性, 设置适用于所有组件的默认值。

另外(来自我上面引用的 SO 帖子):

你也可以在不同的情况下发起不同的活动 带有 newTask 意图标志的 taskAffinities 然后将给出 也将 PID 与同一应用的这些活动分开。

【讨论】:

  • 谢谢,但是我们如何从 strace 输出中查看每个应用程序的多个 PID。因为我们可以在每个单独的 PID 上运行 strace,但是我们如何在同一个应用程序的所有 PID 上运行 strace
  • 问:我很好奇 - 如果您使用的是 Android,首先您是如何运行 strace 的?安卓终端?是的 - strace 是每个 pid。运行 ps 来识别 PID,然后在每个上运行 strace。您可以启动并发 shell,也可以在后台运行 strace (&) 并重定向输出 (2>&1)
  • 我将二进制 strace 文件加载到手机中,并使用 adb shell 运行 strace
  • 回答您的问题:“是的,一个应用程序可能有多个 PID”。有很多工具可以查看您的应用程序是否属于这种情况 - 从“logcat”开始。至于“strace”——我不知道你用它做什么。如果您在特定用例中遇到问题,当然还有其他选择。我假设您可能正在使用 Android Studio,并且您熟悉调试器、logcat 和它提供的许多其他工具。我希望能回答你的问题。祝你好运!
猜你喜欢
  • 2015-06-22
  • 2011-09-22
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 1970-01-01
相关资源
最近更新 更多