Shell: Sneak a way into being a session leader

This commit is contained in:
AnotherTest 2020-09-30 14:05:28 +03:30 committed by Andreas Kling
commit a7828434c0
Notes: sideshowbarker 2024-07-19 02:06:49 +09:00

View file

@ -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];