emacs-bug-tracker
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#49839: closed ([PATCH] shepherd: add keep-tty flag to skip setsid)


From: GNU bug Tracking System
Subject: bug#49839: closed ([PATCH] shepherd: add keep-tty flag to skip setsid)
Date: Tue, 10 Aug 2021 12:53:02 +0000

Your message dated Tue, 10 Aug 2021 14:51:51 +0200
with message-id <87czqlsbrs.fsf@gnu.org>
and subject line Re: bug#49839: [PATCH] shepherd: add keep-tty flag to skip 
setsid
has caused the debbugs.gnu.org bug report #49839,
regarding [PATCH] shepherd: add keep-tty flag to skip setsid
to be marked as done.

(If you believe you have received this mail in error, please contact
help-debbugs@gnu.org.)


-- 
49839: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49839
GNU Bug Tracking System
Contact help-debbugs@gnu.org with problems
--- Begin Message --- Subject: [PATCH] shepherd: add keep-tty flag to skip setsid Date: Tue, 03 Aug 2021 04:07:10 +0300 User-agent: mu4e 1.4.15; emacs 28.0.50

* modules/shepherd/service.scm: add keep-tty flag to skip setsid

when using shepherd as user, programs like xorg server, potentially any program which ends up interacting with user, require terminal to remain.

currently, setsid is called unconditionally from exec-command function,
making it impossible to have such process.

this adds keep-tty flag to make-forkexec-constructor up to exec-command
function where setsid is actually called.

diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
index 587ff68..1ae9544 100644
--- a/modules/shepherd/service.scm
+++ b/modules/shepherd/service.scm
@@ -786,6 +786,7 @@ daemon writing FILE is running in a separate PID namespace."
                        (log-file #f)
                        (directory (default-service-directory))
                        (file-creation-mask #f)
+                       (keep-tty #f)
                        (environment-variables (default-environment-variables)))
   "Run COMMAND as the current process from DIRECTORY, with FILE-CREATION-MASK
 if it's true, and with ENVIRONMENT-VARIABLES (a list of strings like
@@ -804,7 +805,7 @@ false."
     ((program args ...)
      ;; Become the leader of a new session and session group.
      ;; Programs such as 'mingetty' expect this.
-     (setsid)
+     (unless keep-tty (setsid))
 
      (chdir directory)
      (environ environment-variables)
@@ -889,6 +890,7 @@ false."
                             (log-file #f)
                             (directory (default-service-directory))
                             (file-creation-mask #f)
+                            (keep-tty #f)
                             (environment-variables
                              (default-environment-variables)))
   "Spawn a process that executed COMMAND as per 'exec-command', and return
@@ -920,6 +922,7 @@ its PID."
                           #:log-file log-file
                           #:directory directory
                           #:file-creation-mask file-creation-mask
+                          #:keep-tty keep-tty
                           #:environment-variables environment-variables))
           pid))))
 
@@ -929,6 +932,7 @@ its PID."
                                     (group #f)
                                     (supplementary-groups '())
                                     (directory (default-service-directory))
+                                    (keep-tty #f)
                                     (environment-variables
                                      (default-environment-variables))
                                     (file-creation-mask #f)
@@ -949,7 +953,9 @@ When @var{pid-file} is true, it must be the name of a PID 
file associated with
 the process being launched; the return value is the PID read from that file,
 once that file has been created.  If @var{pid-file} does not show up in less
 than @var{pid-file-timeout} seconds, the service is considered as failing to
-start."
+start.
+
+When @var{keep-tty} is true, will not call @code{setsid} for process."
   (lambda args
     (define (clean-up file)
       (when file
@@ -969,6 +975,7 @@ start."
                                   #:log-file log-file
                                   #:directory directory
                                   #:file-creation-mask file-creation-mask
+                                  #:keep-tty keep-tty
                                   #:environment-variables
                                   environment-variables)))
       (if pid-file

--- End Message ---
--- Begin Message --- Subject: Re: bug#49839: [PATCH] shepherd: add keep-tty flag to skip setsid Date: Tue, 10 Aug 2021 14:51:51 +0200 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
Hi,

muradm <mail@muradm.net> skribis:

> * modules/shepherd/service.scm: add keep-tty flag to skip setsid
>
> when using shepherd as user, programs like xorg server, potentially
> any
> program which ends up interacting with user, require terminal to
> remain.
>
> currently, setsid is called unconditionally from exec-command
> function,
> making it impossible to have such process.
>
> this adds keep-tty flag to make-forkexec-constructor up to
> exec-command
> function where setsid is actually called.
>
> diff --git a/modules/shepherd/service.scm b/modules/shepherd/service.scm
> index 587ff68..1ae9544 100644
> --- a/modules/shepherd/service.scm
> +++ b/modules/shepherd/service.scm
> @@ -786,6 +786,7 @@ daemon writing FILE is running in a separate PID 
> namespace."
>                         (log-file #f)
>                         (directory (default-service-directory))
>                         (file-creation-mask #f)
> +                       (keep-tty #f)
>                         (environment-variables 
> (default-environment-variables)))
>    "Run COMMAND as the current process from DIRECTORY, with FILE-CREATION-MASK
>  if it's true, and with ENVIRONMENT-VARIABLES (a list of strings like
> @@ -804,7 +805,7 @@ false."
>      ((program args ...)
>       ;; Become the leader of a new session and session group.
>       ;; Programs such as 'mingetty' expect this.
> -     (setsid)
> +     (unless keep-tty (setsid))

I did that slightly differently:

  
https://git.savannah.gnu.org/cgit/shepherd.git/commit/?id=c43f81794344dbac31bcb8b8f1c0d266f47f14fa

Let me know if it works for you.

Thanks,
Ludo’.


--- End Message ---

reply via email to

[Prev in Thread] Current Thread [Next in Thread]