AMS 启动的时候杀掉所有进程

在Android中,AMS(ActivityManagerService)在SystemServer启动时执行清理操作。在ActivityManagerService的start方法内,调用了Process.removeAllProcessGroups()来杀死所有进程。此操作进一步在android_util_Process.cpp的native层完成。

有时候分析 Android log 的时候发现几乎所有进程都 die 了,那基本判定 AMS 重启了。

AMS 代码:http://androidxref.com/6.0.1_r10/xref/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

AMS 通过 SystemServer 启动,在其代码 start 中有如下部分:

private void start() {
        Process.removeAllProcessGroups();
        xxxxxx
}

看到  Process.removeAllProcessGroups() 就是杀所有进程的,这个函数是native继续跟下去,在 android_util_Process.cpp中:

void android_os_Process_removeAllProcessGroups(JNIEnv* env, jobject clazz)
{
    return removeAllProcessGroups();
}

static const JNINativeMethod methods[] = {
...........
    {"killProcessGroup", "(II)I", (void*)android_os_Process_killProcessGroup},
...........
};

继续跟踪代码到 system/core/libprocessgroup/processgroup.cpp 中:

void removeAllProcessGroups()
{
    SLOGV("removeAllProcessGroups()");
    DIR *root = opendir(PROCESSGROUP_CGROUP_PATH);
    if (root == NULL) {
        SLOGE("failed to open %s: %s", PROCESSGROUP_CGROUP_PATH, strerror(errno));
    } else {
        struct dirent cur;
        struct dirent *dir;
        while ((readdir_r(root, &cur, &dir) == 0) && dir) {
            char path[PROCESSGROUP_MAX_PATH_LEN];

            if (dir->d_type != DT_DIR) {
                continue;
            }
            if (strncmp(dir->d_name, PROCESSGROUP_UID_PREFIX, strlen(PROCESSGROUP_UID_PREFIX))) {
                continue;
            }

            snprintf(path, sizeof(path), "%s/%s", PROCESSGROUP_CGROUP_PATH, dir->d_name);
            removeUidProcessGroups(path);
            SLOGV("removing %s\n", path);
            rmdir(path);
        }
        closedir(root);
    }
}
这里会把 /acct 目录下所有 uid_ 开头的进程都干掉。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值