【问题标题】:Difference between killing a process and System.exit(0); [duplicate]杀死进程和 System.exit(0) 的区别; [复制]
【发布时间】:2013-03-11 05:42:56
【问题描述】:

有什么区别

int id= android.os.Process.myPid();
android.os.Process.killProcess(id);

System.exit(1);

我知道两者都会杀死进程。 但是,我感觉到在杀死一个进程时,当它重新启动时,它是从以前的状态开始的。但是,我想知道这种错误背后的技术细节。

【问题讨论】:

  • 可能是重复的。但是,该线程上的所有答案都说它们都是相同的。

标签: java android process


【解决方案1】:

从技术上讲,像这样杀死一个进程会向该进程发送一个 SIG_TERM 并让它稍微优雅地关闭。 System.exit(1) 只会退出 JVM。您还可以使用

向进程发送 -9 = SIG_KILL 信号
http://developer.android.com/reference/android/os/Process.html#sendSignal(int, int)

这会立即终止进程。我不推荐任何这些,并建议使用finish()。我能想到的唯一例外可能是您正在做的事情会产生大量子进程并且您想在某个时候关闭它们。

【讨论】:

    【解决方案2】:
    System.exit(1);
    

    通常一个非零的错误状态表示程序异常结束并且

    int id= android.os.Process.myPid();
    

    Process 是用于管理操作系统进程的工具。

    android.os.Process.killProcess(id);
    

    杀死具有给定 PID 的进程。请注意,尽管此 API 允许我们根据其 PID 请求终止任何进程,但内核仍会对您实际能够终止的 PID 施加标准限制。通常,这意味着仅运行调用者的包/应用程序的进程以及该应用程序创建的任何其他进程;共享一个公共 UID 的包也将能够杀死彼此的进程。

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 2013-08-19
      • 1970-01-01
      • 2013-10-12
      • 2013-05-26
      • 1970-01-01
      相关资源
      最近更新 更多