diff options
author | Elliott Hughes <enh@google.com> | 2019-07-11 14:00:07 -0700 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-07-12 13:18:11 -0500 |
commit | a7b8b772dee4f159028e3b998454d7466fbbc88f (patch) | |
tree | f8cdf969a4a42ff39bad63e5d3a7aaf4844cb541 /toys/pending | |
parent | 5194d4ad66ad130cb730e0b192ba1e2b5181184d (diff) | |
download | toybox-a7b8b772dee4f159028e3b998454d7466fbbc88f.tar.gz |
pidof: fix default behavior, add -x.
Before this patch, we're effectively doing `pidof -x` all the time. This
patch changes names_to_pid() to allow us to say whether or not we want to
include scripts, and adjusts the callers appropriately.
Also add tests for `pidof` versus `pidof -x` which pass after this
patch, without regressing the existing killall tests.
Diffstat (limited to 'toys/pending')
-rw-r--r-- | toys/pending/bootchartd.c | 38 |
1 files changed, 12 insertions, 26 deletions
diff --git a/toys/pending/bootchartd.c b/toys/pending/bootchartd.c index 7e5a136f..1fe6aff6 100644 --- a/toys/pending/bootchartd.c +++ b/toys/pending/bootchartd.c @@ -34,24 +34,9 @@ GLOBALS( int proc_accounting; int is_login; - void *head; + pid_t cur_pid; ) -struct pid_list { - struct pid_list *next, *prev; - int pid; -}; - -static int push_pids_in_list(pid_t pid, char *name) -{ - struct pid_list *new = xzalloc(sizeof(struct pid_list)); - - new->pid = pid; - dlist_add_nomalloc((void *)&TT.head, (void *)new); - - return 0; -} - static void dump_data_in_file(char *fname, int wfd) { int rfd = open(fname, O_RDONLY); @@ -253,13 +238,21 @@ static void stop_logging(char *tmp_dir, char *prog) } } +static int signal_pid(pid_t pid, char *name) +{ + if (pid != TT.cur_pid) kill(pid, SIGUSR1); + return 0; +} + void bootchartd_main() { - pid_t lgr_pid, self_pid = getpid(); + pid_t lgr_pid; int bchartd_opt = 0; // 0=PID1, 1=start, 2=stop, 3=init + + TT.cur_pid = getpid(); TT.smpl_period_usec = 200 * 1000; - TT.is_login = (self_pid == 1); + TT.is_login = (TT.cur_pid == 1); if (*toys.optargs) { if (!strcmp("start", *toys.optargs)) bchartd_opt = 1; else if (!strcmp("stop", *toys.optargs)) bchartd_opt = 2; @@ -267,16 +260,9 @@ void bootchartd_main() else error_exit("Unknown option '%s'", *toys.optargs); if (bchartd_opt == 2) { - struct pid_list *temp; char *process_name[] = {"bootchartd", NULL}; - names_to_pid(process_name, push_pids_in_list); - temp = TT.head; - if (temp) temp->prev->next = 0; - for (; temp; temp = temp->next) - if (temp->pid != self_pid) kill(temp->pid, SIGUSR1); - llist_traverse(TT.head, free); - + names_to_pid(process_name, signal_pid, 0); return; } } else if (!TT.is_login) error_exit("not PID 1"); |