aboutsummaryrefslogtreecommitdiff
path: root/debianutils
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2012-03-23 12:12:03 +0000
committerRon Yorston <rmy@pobox.com>2012-03-23 12:12:03 +0000
commitb0f54743e36af163ae2530c381c485bb29df13dc (patch)
treecda4cfeaae6e47fe4f14c1b566092be4da9affc4 /debianutils
parent40514a0309939f2446f0d4ed9600cad5de396e7f (diff)
parentba88826c66411affc1da3614742b454654f7298a (diff)
downloadbusybox-w32-b0f54743e36af163ae2530c381c485bb29df13dc.tar.gz
busybox-w32-b0f54743e36af163ae2530c381c485bb29df13dc.tar.bz2
busybox-w32-b0f54743e36af163ae2530c381c485bb29df13dc.zip
Merge branch 'busybox' into merge
Conflicts: Makefile.flags
Diffstat (limited to 'debianutils')
-rw-r--r--debianutils/start_stop_daemon.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/debianutils/start_stop_daemon.c b/debianutils/start_stop_daemon.c
index 02609c04f..7dadc3c9e 100644
--- a/debianutils/start_stop_daemon.c
+++ b/debianutils/start_stop_daemon.c
@@ -31,7 +31,8 @@ Options controlling process matching
31[TODO: can PROCESS_NAME be a full pathname? Should we require full match then 31[TODO: can PROCESS_NAME be a full pathname? Should we require full match then
32with /proc/$PID/exe or argv[0] (comm can't be matched, it never contains path)] 32with /proc/$PID/exe or argv[0] (comm can't be matched, it never contains path)]
33 -x,--exec EXECUTABLE Look for processes that were started with this 33 -x,--exec EXECUTABLE Look for processes that were started with this
34 command in /proc/$PID/cmdline. 34 command in /proc/$PID/exe and /proc/$PID/cmdline
35 (/proc/$PID/cmdline is a bbox extension)
35 Unlike -n, we match against the full path: 36 Unlike -n, we match against the full path:
36 "ntpd" != "./ntpd" != "/path/to/ntpd" 37 "ntpd" != "./ntpd" != "/path/to/ntpd"
37 -p,--pidfile PID_FILE Look for processes with PID from this file 38 -p,--pidfile PID_FILE Look for processes with PID from this file
@@ -68,7 +69,7 @@ Misc options:
68//usage: "\n -n,--name NAME Match processes with NAME" 69//usage: "\n -n,--name NAME Match processes with NAME"
69//usage: "\n in comm field in /proc/PID/stat" 70//usage: "\n in comm field in /proc/PID/stat"
70//usage: "\n -x,--exec EXECUTABLE Match processes with this command" 71//usage: "\n -x,--exec EXECUTABLE Match processes with this command"
71//usage: "\n in /proc/PID/cmdline" 72//usage: "\n in /proc/PID/{exe,cmdline}"
72//usage: "\n -p,--pidfile FILE Match a process with PID from the file" 73//usage: "\n -p,--pidfile FILE Match a process with PID from the file"
73//usage: "\n All specified conditions must match" 74//usage: "\n All specified conditions must match"
74//usage: "\n-S only:" 75//usage: "\n-S only:"
@@ -198,8 +199,18 @@ static int pid_is_exec(pid_t pid)
198{ 199{
199 ssize_t bytes; 200 ssize_t bytes;
200 char buf[sizeof("/proc/%u/cmdline") + sizeof(int)*3]; 201 char buf[sizeof("/proc/%u/cmdline") + sizeof(int)*3];
202 char *procname, *exelink;
203 int match;
201 204
202 sprintf(buf, "/proc/%u/cmdline", (unsigned)pid); 205 procname = buf + sprintf(buf, "/proc/%u/exe", (unsigned)pid) - 3;
206
207 exelink = xmalloc_readlink(buf);
208 match = (exelink && strcmp(execname, exelink) == 0);
209 free(exelink);
210 if (match)
211 return match;
212
213 strcpy(procname, "cmdline");
203 bytes = open_read_close(buf, G.execname_cmpbuf, G.execname_sizeof); 214 bytes = open_read_close(buf, G.execname_cmpbuf, G.execname_sizeof);
204 if (bytes > 0) { 215 if (bytes > 0) {
205 G.execname_cmpbuf[bytes] = '\0'; 216 G.execname_cmpbuf[bytes] = '\0';
@@ -474,7 +485,7 @@ int start_stop_daemon_main(int argc UNUSED_PARAM, char **argv)
474 *--argv = startas; 485 *--argv = startas;
475 if (opt & OPT_BACKGROUND) { 486 if (opt & OPT_BACKGROUND) {
476#if BB_MMU 487#if BB_MMU
477 bb_daemonize(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS); 488 bb_daemonize(DAEMON_DEVNULL_STDIO + DAEMON_CLOSE_EXTRA_FDS + DAEMON_DOUBLE_FORK);
478 /* DAEMON_DEVNULL_STDIO is superfluous - 489 /* DAEMON_DEVNULL_STDIO is superfluous -
479 * it's always done by bb_daemonize() */ 490 * it's always done by bb_daemonize() */
480#else 491#else