|
|
|
|
|
by bhawks
480 days ago
|
|
Calling setsid in pre_exec isn't exactly correct, you'd do this to daemonize a process in order to prevent it from getting signals from the process which spawned you exited or its terminal disconnected. If you read exit(3) you'll see that you also need a controlling terminal for the kernel to send SIGHUP to the processes in your foreground process group. In python it'd look roughly like: master, slave = os.openpty()
# ensure we can call setsid successfully
try:
pid = os.fork()
if pid > 0:
os.close(master)
os.close(slave)
sys.exit(0)
finally:
sys.exit(1)
os.setsid()
# we are now session leader and process group leader
fcntl.ioctl(master, termios.TIOCSCTTY, 0)
# we now have a controlling pty - closing master will send us a SIGHUP
os.close(slave)
# go start spawning subprocesses - if _this_ process is killed, they will receive SIGHUPs. Unless they take themselves out of your session or the foreground process group.
|
|