diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 914688e3e8852..fffdda13d11f6 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -45,6 +45,8 @@ #include #include "android-base/logging.h" +#include +#include #include #include #include @@ -65,6 +67,8 @@ namespace { using android::String8; +using android::base::StringPrintf; +using android::base::WriteStringToFile; static pid_t gSystemServerPid = 0; @@ -770,6 +774,11 @@ static jint com_android_internal_os_Zygote_nativeForkSystemServer( ALOGE("System server process %d has died. Restarting Zygote!", pid); RuntimeAbort(env, __LINE__, "System server process has died. Restarting Zygote!"); } + + // Assign system_server to the correct memory cgroup. + if (!WriteStringToFile(StringPrintf("%d", pid), "/dev/memcg/system/tasks")) { + ALOGE("couldn't write %d to /dev/memcg/system/tasks", pid); + } } return pid; }