From d0fb36d10bc2bdf6822629daa098b07a90730e88 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Sun, 12 May 2019 21:39:02 -0700 Subject: [PATCH] Add ability to specify detached=true in options --- microscript/ILibDuktape_ChildProcess.c | 1 + microstack/ILibProcessPipe.c | 4 ++++ microstack/ILibProcessPipe.h | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/microscript/ILibDuktape_ChildProcess.c b/microscript/ILibDuktape_ChildProcess.c index 1562707..8181959 100644 --- a/microscript/ILibDuktape_ChildProcess.c +++ b/microscript/ILibDuktape_ChildProcess.c @@ -276,6 +276,7 @@ duk_ret_t ILibDuktape_ChildProcess_execFile(duk_context *ctx) // Options spawnType = (ILibProcessPipe_SpawnTypes)Duktape_GetIntPropertyValue(ctx, i, "type", (int)ILibProcessPipe_SpawnTypes_DEFAULT); uid = Duktape_GetIntPropertyValue(ctx, i, "uid", -1); + if (Duktape_GetBooleanProperty(ctx, i, "detached", 0) != 0) { spawnType = ILibProcessPipe_SpawnTypes_POSIX_DETACHED; } #ifdef WIN32 if (uid >= 0 && spawnType == ILibProcessPipe_SpawnTypes_USER) { spawnType = ILibProcessPipe_SpawnTypes_SPECIFIED_USER; } #endif diff --git a/microstack/ILibProcessPipe.c b/microstack/ILibProcessPipe.c index 1e0d83c..7229290 100644 --- a/microstack/ILibProcessPipe.c +++ b/microstack/ILibProcessPipe.c @@ -936,6 +936,10 @@ ILibProcessPipe_Process ILibProcessPipe_Manager_SpawnProcessEx4(ILibProcessPipe_ { ignore_result(setuid((uid_t)UID)); } + if (spawnType == ILibProcessPipe_SpawnTypes_POSIX_DETACHED) + { + ignore_result(setsid()); + } while (envvars != NULL && ((char**)envvars)[0] != NULL) { setenv(((char**)envvars)[0], ((char**)envvars)[1], 1); diff --git a/microstack/ILibProcessPipe.h b/microstack/ILibProcessPipe.h index 09c2899..5ab38ad 100644 --- a/microstack/ILibProcessPipe.h +++ b/microstack/ILibProcessPipe.h @@ -40,7 +40,8 @@ typedef enum ILibProcessPipe_SpawnTypes ILibProcessPipe_SpawnTypes_WINLOGON = 2, ILibProcessPipe_SpawnTypes_TERM = 3, ILibProcessPipe_SpawnTypes_DETACHED = 4, - ILibProcessPipe_SpawnTypes_SPECIFIED_USER = 5 + ILibProcessPipe_SpawnTypes_SPECIFIED_USER = 5, + ILibProcessPipe_SpawnTypes_POSIX_DETACHED=6 }ILibProcessPipe_SpawnTypes; #ifdef WIN32