【问题标题】:Android - How kill process with ppid = 1Android - 如何使用 ppid = 1 杀死进程
【发布时间】:2017-01-25 14:30:55
【问题描述】:

我在一个通过卫星调制解调器执行通信的 android 项目中。

您需要为调制解调器运行 pppd 命令才能通过 android 建立连接。

我通过 bash 执行了这个命令。

   process = Runtime.getRuntime().exec(new String[]{"su", "root", "-c", "/data/local/android_connect.sh", "&> /mnt/sdcard/Download/log.txt"});

在某些时候,android 会使用 PPID = 1 创建这个进程

发生这种情况时,我无法通过执行以下命令来终止进程

android.os.Process.killProcess(pidProcess);
        if (process != null)
            process.destroy();

是否可以通过android杀死PPID = 1的进程?

【问题讨论】:

  • 你为什么不被PID杀死?

标签: android linux bash pppd


【解决方案1】:

这不是一个好主意,但您可以尝试调用 Runtime.getRuntime().exec("kill -9 " + PID);。 或者尝试拨打killBackgroundProcesses 而不是killProcesskillProcess 不允许您杀死 UID 与您的应用 UID 不同的进程,而 killBackgroundProcesses 可以为您执行此操作。

请确保您的应用拥有android.permission.ACCESS_SUPERUSERandroid.permission.KILL_BACKGROUND_PROCESSESandroid.permission.GET_TASKS 等权限。

【讨论】:

  • 也许-9 不是必需的。父进程是init这一事实应该没有区别,不是吗?
  • 是的,我认为应该没什么区别。但是,如果作者在终止 proc 时遇到问题 - 我认为 SIGKILL 可以提供帮助。
  • killBackgroundProcess有什么区别?
  • @IgorGanapolsky 我已经修复了我的回复。我的意思是 killBackgroundProcesses。它允许您终止 UID 与您的应用程序不同的进程,而 killProcess 只能终止与您的应用程序具有相同 UID 的进程。
【解决方案2】:

PID=1 是进程管理器。它直接在内核之后执行,如果你杀死它,所有的进程都会死掉。不建议这样做,但如果你决定你可以试试这个:

Runtime.getRuntime().exec("kill -9 " + PID);

【讨论】:

  • 在此调用后是否仍会进行垃圾收集?
猜你喜欢
  • 2013-06-28
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
  • 2021-12-31
  • 1970-01-01
相关资源
最近更新 更多