[PATCH 2/2] start-stop-daemon - find processes better
Denys Vlasenko
vda.linux at googlemail.com
Fri May 2 08:43:05 UTC 2008
Hi Roy, Joakim.
Joakim, please scroll down to the end and let me know
what you thing about proposed ssd documentation.
On Thursday 01 May 2008 15:38, Roy Marples wrote:
> > > > It's not a pathname, it's just a "name" (arbitrary)
> > >
> > > Correct. It's a crap option. Gentoo silently remaps it to --exec
> >
> > Are you suggesting to drop it? This risks breaking
> > things for existing users.
>
> No, I'm suggesting just to remap --startas to --exec
Don't see why it cannot be used as intended - as an argv[0] override.
> > > My view is that it searches for programs started as that.
> > > So if the user launches /usr/sbin/ntpd then ssd should check
> > > /proc/pid/cmdline to see if it was started as /usr/sbin/ntpd and then
> > > match.
> >
> > And what to do if cmdline contains just "ntpd"? or "./ntpd"?
> > Does that match?
> > Do we need to check /proc/$PID/stat? /proc/$PID/exec?
>
> That's the one hole really :)
> It doesn't match, but then I don't expect it too either. ssd is normally used
> in scripts, so the way it's started should match the way it's stopped.
I need this to be exactly spelled out.
> > > > -n,--name process-name Stop processes with this name
> > > AND don't create a pidfile AND are scripts. Again, this is why we
> > > changed --exec to look at how it was started to solve this problem.
> >
> > How it is different from -x?
>
> -x is --exec, or did I miss something?
I meant "how --exec is different for --name?"
> > > In normal ssd, -p only matters when stopping. It reads the specified file
> > > and just stops that pid.
> > > However, ssd can also background some daemons which don't by default. Or
> > > which don't create a pidifle by default. So the solution is to run the
> > > daemon in foreground mode in a forked process. We then store that pid in
> > > the pidfile. Example
> > >
> > > start-stop-daemon --start --exec /usr/sbin/daemon --pidfile
> > > /var/run/daemon.pid --make-pidfile -- --foreground --foreground is an
> > > option specific to daemon and not start-stop-daemon.
> >
> > But --make-pidfile seems to be superfluous here... --start + --pidfile FILE
> > imply pidfile creation.
Really? Must be documented. And if --make-pidfile indeed implies
pidfile creation, then it makes no sense. Adding/removing
--make-pidfile to command line chages nothing.
> Not so as --pidfile is used to check processes before the demon starts
>
> start-stop-daemon --start --exec /usr/bin/foo --pidfile /var/run/foo.pid
>
> Check that /usr/bin/foo is NOT running on the pidfile in /var/run/foo.pid.
> If not running, start foo, otherwise error.
> ssd should not stamp on pidfiles unless told.
Please review proposed documentation below.
Please spell out how -n NAME and -x NAME are different in respect
to stopping the processes. To reiterate: we nave 3 different
ideas of "process name":
In Linux we have three ways to determine "process name":
1. /proc/PID/stat has "...(name)...", among other things. It's so-called "comm" field.
2. /proc/PID/cmdline's first NUL-terminated string. It's argv[0] from exec syscall.
3. /proc/PID/exe symlink. Points to the running executable file.
kernel threads:
comm: thread name
cmdline: empty
exe: <readlink fails>
executable
comm: first 15 chars of base name
(if executable is a symlink, then first 15 chars of symlink name are used)
cmdline: argv[0] from exec syscall
exe: points to executable (resolves symlink, unlike comm)
script (an executable with #!/path/to/interpreter):
comm: first 15 chars of script's base name (symlinks are not resolved)
cmdline: /path/to/interpreter (symlinks are not resolved)
(script name is in argv[1], args are pushed into argv[2] etc)
exe: points to interpreter's executable (symlinks are resolved)
Which one(s) should be used by -n? -x?
start-stop-daemon [OPTIONS] [--start|--stop] ... [-- arguments...]
One (only) of these must be given:
-S,--start Start
-K,--stop Stop
start-stop-daemon will first search for matching processes,
stop them (by sending a signal). If --start is given,
it will then start a new process.
Stop options:
-u,--user USERNAME|UID Stop this user's processes
-n,--name PROCESS_NAME Stop processes with this name ??
-x,--exec EXECUTABLE Stop processes with this name ??
-p,--pidfile PID_FILE Stop processes with PID from this file
-s,--signal SIG Signal to send (default TERM)
Start options:
-x,--exec EXECUTABLE Program to run (1st arg of execvp). Mandatory.
-a,--startas NAME argv[0] (defults to EXECUTABLE)
-b,--background Put process into background
-N,--nicelevel N Add N to process's nice level
-c,--chuid user[:[grp]] Change to specified user/group
-m,--make-pidfile -p,--pidfile PID_FILE
Write PID to the file
(both -m and -p must be given!)
Misc options:
-o,--oknodo Exit status 0 if nothing done
-q,--quiet Quiet
-v,--verbose Verbose
--
vda
More information about the busybox
mailing list