From a7828434c0bfb80ece6ce9a712e0d1a023a4a7e8 Mon Sep 17 00:00:00 2001 From: AnotherTest Date: Wed, 30 Sep 2020 14:05:28 +0330 Subject: Shell: Sneak a way into being a session leader --- Shell/main.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/Shell/main.cpp b/Shell/main.cpp index 98295bb480..46fc8200c8 100644 --- a/Shell/main.cpp +++ b/Shell/main.cpp @@ -133,11 +133,24 @@ int main(int argc, char** argv) return 0; } - if (getsid(getpid()) == 0) { + auto pid = getpid(); + if (auto sid = getsid(pid); sid == 0) { if (setsid() < 0) { perror("setsid"); // Let's just hope that it's ok. } + } else if (sid != pid) { + if (getpgid(pid) != pid) { + dbgf("We were already in a session with sid={} (we are {}), let's do some gymnastics", sid, pid); + if (setpgid(pid, sid) < 0) { + auto strerr = strerror(errno); + dbgf("couldn't setpgid: {}", strerr); + } + if (setsid() < 0) { + auto strerr = strerror(errno); + dbgf("couldn't setsid: {}", strerr); + } + } } shell->current_script = argv[0]; -- cgit v1.2.3