diff --git a/services/src/init_service.c b/services/src/init_service.c index fc85be1628ede0cbc130dfc58744e10f5d4a9ba3..e5b16a6d991f1db59e8380d289aec06647038c66 100644 --- a/services/src/init_service.c +++ b/services/src/init_service.c @@ -176,6 +176,19 @@ int ServiceStart(Service *service) INIT_LOGE("service %s execve failed! err %d.\n", service->name, errno); } #else + // mksh is set to the foreground + if (strstr(service->pathArgs[0], "mksh") != NULL) { + int gid = getpgrp(); + if (gid < 0) { + INIT_LOGE("service %s get group id failed, err %d\n", service->name, errno); + exit(0x7f); + } + ret = tcsetpgrp(STDIN_FILENO, gid); + if (ret != 0) { + INIT_LOGE("service %s tcsetpgrp failed, err %d\n", service->name, errno); + exit(0x7f); + } + } char* env[] = {"LD_LIBRARY_PATH=/storage/app/libs", NULL}; if (execve(service->pathArgs[0], service->pathArgs, env) != 0) { INIT_LOGE("service %s execve failed! err %d.\n", service->name, errno);