diff options
-rw-r--r-- | Shell/main.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
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]; |