From ff32e9979130e6237b0d97ef88304fa79ce61b06 Mon Sep 17 00:00:00 2001 From: Jakob Unterwurzacher Date: Thu, 29 Dec 2022 13:52:35 +0100 Subject: main: doMount: call Setsid before starting logger The logger should be in the new background session together with the gocryptfs process. Before: $ xfce4-terminal -x gocryptfs a b $ ps xao pid,ppid,pgid,sid,comm,args PID PPID PGID SID COMMAND COMMAND 192272 1371 192272 192272 gocryptfs /ssd2/jakob.donotbackup/go/bin/gocryptfs -fg -notifypid=192265 a b 192292 192272 192265 192265 logge [logger] After: $ xfce4-terminal -x gocryptfs a b $ ps xao pid,ppid,pgid,sid,comm,args PID PPID PGID SID COMMAND COMMAND 211714 1371 211714 211714 gocryptfs /ssd2/jakob.donotbackup/go/bin/gocryptfs -fg -notifypid=211708 a b 211776 211714 211714 211714 logger logger -t gocryptfs-211714-logger Fixes https://github.com/rfjakob/gocryptfs/issues/660 --- mount.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/mount.go b/mount.go index 434edad..4d72778 100644 --- a/mount.go +++ b/mount.go @@ -120,9 +120,18 @@ func doMount(args *argContainer) { tlog.Info.Println(tlog.ColorGreen + "Filesystem mounted and ready." + tlog.ColorReset) // We have been forked into the background, as evidenced by the set // "notifypid". + // Do what daemons should do: https://man7.org/linux/man-pages/man7/daemon.7.html if args.notifypid > 0 { // Chdir to the root directory so we don't block unmounting the CWD os.Chdir("/") + // Disconnect from the controlling terminal by creating a new session. + // This prevents us from getting SIGINT when the user presses Ctrl-C + // to exit a running script that has called gocryptfs, or SIGHUP when + // xfce4-terminal closes itself ( https://github.com/rfjakob/gocryptfs/issues/660 ). + _, err = syscall.Setsid() + if err != nil { + tlog.Warn.Printf("Setsid: %v", err) + } // Switch to syslog if !args.nosyslog { // Switch all of our logs and the generic logger to syslog @@ -134,13 +143,6 @@ func doMount(args *argContainer) { // Daemons should redirect stdin, stdout and stderr redirectStdFds() } - // Disconnect from the controlling terminal by creating a new session. - // This prevents us from getting SIGINT when the user presses Ctrl-C - // to exit a running script that has called gocryptfs. - _, err = syscall.Setsid() - if err != nil { - tlog.Warn.Printf("Setsid: %v", err) - } // Send SIGUSR1 to our parent sendUsr1(args.notifypid) } -- cgit v1.2.3