annotate toys/pending/pgrep.c @ 1005:03f72b57a092

DHCP client and server, from Ashwini Sharma.
author Rob Landley <rob@landley.net>
date Wed, 14 Aug 2013 19:09:33 -0500
parents 8b1814e4c987
children 9ee321b6edb5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
962
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
1 /* pgrep.c - pgrep and pkill implementation
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
2 *
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
3 * Copyright 2012 Madhur Verma <mad.flexi@gmail.com>
997
8b1814e4c987 Ashwini Sharma said that Kyungwan Han should be in the contact info for the commands he sent recently.
Rob Landley <rob@landley.net>
parents: 962
diff changeset
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com>
962
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
5 *
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
6
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
7 USE_PGREP(NEWTOY(pgrep, "?P# s# xvonlf[!sP]", TOYFLAG_USR|TOYFLAG_BIN))
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
8 USE_PGREP(OLDTOY(pkill, pgrep, "?P# s# xvonlf[!sP]", TOYFLAG_USR|TOYFLAG_BIN))
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
9
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
10 config PGREP
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
11 bool "pgrep"
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
12 default n
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
13 help
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
14 usage: pgrep [-flnovx] [-s SID|-P PPID|PATTERN]
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
15 pkill [-l|-SIGNAL] [-fnovx] [-s SID|-P PPID|PATTERN]
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
16
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
17 -l Show command name too / List all signals
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
18 -f Match against entire command line
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
19 -n Show/Signal the newest process only
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
20 -o Show/Signal the oldest process only
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
21 -v Negate the match
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
22 -x Match whole name (not substring)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
23 -s Match session ID (0 for current)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
24 -P Match parent process ID
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
25 */
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
26
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
27 #define FOR_pgrep
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
28 #include "toys.h"
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
29 #include <regex.h>
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
30
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
31 #define flag_get(f,v,d) ((toys.optflags & f) ? v : d)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
32 #define flag_chk(f) ((toys.optflags & f) ? 1 : 0)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
33
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
34 GLOBALS(
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
35 long sid; //-s
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
36 long ppid; //-P
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
37 char *signame;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
38 )
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
39
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
40 static int exec_action(unsigned pid, char *name, int signal)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
41 {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
42 if (toys.which->name[1] == 'g') {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
43 printf("%d", pid);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
44 if (flag_chk(FLAG_l)) printf(" %s", name);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
45 printf("\n");
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
46 } else {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
47 kill(pid, signal);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
48 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
49 return 0;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
50 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
51
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
52 static int regex_match(regex_t *rp, char *tar, char *patt)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
53 {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
54 regmatch_t rm[1];
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
55 int len = strlen(tar);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
56 if (regexec(rp, tar, 1, rm, 0) == 0) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
57 if (flag_chk(FLAG_x)) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
58 if ((rm[0].rm_so == 0) && ((rm[0].rm_eo - rm[0].rm_so) == len)) return 1;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
59 } else return 1;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
60 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
61 return 0;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
62 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
63
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
64 void pgrep_main(void)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
65 {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
66 int signum=0, eval=0, ret=1;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
67 DIR *dp=NULL;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
68 struct dirent *entry=NULL;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
69 regex_t rp;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
70 unsigned pid=0, ppid=0, sid=0, latest_pid=0;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
71 char *cmdline=NULL, *latest_cmdline = NULL;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
72 pid_t self = getpid();
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
73
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
74 if (!(dp = opendir("/proc"))) perror_exit("OPENDIR: failed to open /proc");
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
75 setlinebuf(stdout);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
76
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
77 if (toys.which->name[1] == 'k') {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
78 if (flag_chk(FLAG_l)) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
79 sig_to_num(NULL);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
80 return;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
81 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
82 if (!TT.signame && *toys.optargs && **toys.optargs == '-') {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
83 TT.signame = *(toys.optargs++) + 1;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
84 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
85 if (TT.signame) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
86 char *arg;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
87 int i = strtol(TT.signame, &arg, 10);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
88 if (!*arg) arg = num_to_sig(i);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
89 else arg = TT.signame;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
90 if (!arg || (signum = sig_to_num(arg)) == -1)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
91 error_exit("Unknown signal '%s'", arg);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
92 } else signum = SIGTERM;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
93 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
94 if (!(flag_chk(FLAG_s) || flag_chk(FLAG_P)) && !*toys.optargs) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
95 toys.exithelp++;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
96 error_exit("missing argument");
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
97 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
98 if (*(toys.optargs+1) && !(flag_chk(FLAG_s) || flag_chk(FLAG_P))) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
99 toys.exithelp++;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
100 error_exit("max argument > 1");
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
101 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
102 if (*toys.optargs) { /* compile regular expression(PATTERN) */
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
103 if ((eval = regcomp(&rp, *toys.optargs, REG_EXTENDED | REG_NOSUB)) != 0) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
104 char errbuf[256];
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
105 (void) regerror(eval, &rp, errbuf, sizeof(errbuf));
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
106 error_exit("%s", errbuf);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
107 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
108 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
109 if (flag_chk(FLAG_s)&&(TT.sid==0)) TT.sid = getsid(0);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
110 while ((entry = readdir(dp))) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
111 int fd = -1, n = 0;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
112 if (!isdigit(*entry->d_name)) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
113
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
114 pid = strtol(entry->d_name, NULL, 10);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
115 if (pid == self) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
116
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
117 snprintf(toybuf, sizeof(toybuf), "/proc/%s/cmdline", entry->d_name);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
118 if ((fd = open(toybuf, O_RDONLY)) == -1) goto cmdline_fail;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
119 n = read(fd, toybuf, sizeof(toybuf));
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
120 close(fd);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
121 toybuf[n--] = '\0';
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
122 if (n < 0) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
123 cmdline_fail:
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
124 snprintf(toybuf, sizeof(toybuf), "/proc/%s/comm", entry->d_name);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
125 if ((fd = open(toybuf, O_RDONLY)) == -1) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
126 n = read(fd, toybuf, sizeof(toybuf));
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
127 close(fd);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
128 toybuf[--n] = '\0';
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
129 if (n < 1) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
130 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
131 if (flag_chk(FLAG_f)) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
132 while (--n)
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
133 if (toybuf[n] < ' ') toybuf[n] = ' ';
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
134 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
135 if (cmdline) free(cmdline);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
136 cmdline = xstrdup(toybuf);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
137 if (flag_chk(FLAG_s) || flag_chk(FLAG_P)) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
138 snprintf(toybuf, sizeof(toybuf), "/proc/%s/stat", entry->d_name);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
139 if ((fd = open(toybuf, O_RDONLY)) == -1) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
140 n = read(fd, toybuf, sizeof(toybuf));
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
141 close(fd);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
142 if (n<1) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
143 n = sscanf(toybuf, "%*u %*s %*c %u %*u %u", &ppid, &sid);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
144 if (flag_chk(FLAG_s)) if (sid != TT.sid) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
145 if (flag_chk(FLAG_P)) if (ppid != TT.ppid) continue;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
146 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
147 if (!*toys.optargs || (regex_match(&rp, cmdline, *toys.optargs)^flag_chk(FLAG_v))) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
148 if (flag_chk(FLAG_n)) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
149 if (latest_cmdline) free(latest_cmdline);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
150 latest_cmdline = xstrdup(cmdline);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
151 latest_pid = pid;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
152 } else exec_action(pid, cmdline, signum);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
153 ret = 0;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
154 if (flag_chk(FLAG_o)) break;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
155 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
156 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
157 if (cmdline) free(cmdline);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
158 if (latest_cmdline) {
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
159 exec_action(latest_pid, latest_cmdline, signum);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
160 free(latest_cmdline);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
161 }
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
162 if (*toys.optargs) regfree(&rp);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
163 closedir(dp);
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
164 toys.exitval = ret;
194acfd68755 pgrep and pkill by Madhur Verma,
Rob Landley <rob@landley.net>
parents:
diff changeset
165 }