annotate toys/pending/killall5.c @ 1349:bf2e5591bdf0 draft

Cleanup strings.
author Rob Landley <rob@landley.net>
date Wed, 11 Jun 2014 08:02:55 -0500
parents 78a3eaf5555f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1326
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
1 /* killall5.c - Send signal (default: TERM) to all processes outside current session.
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
2 *
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
3 * Copyright 2014 Ranjan Kumar <ranjankumar.bth@gmail.com>
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
4 * Copyright 2014 Kyungwan Han <asura321@gamil.com>
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
5 *
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
6 * No Standard
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
7
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
8 USE_KILLALL5(NEWTOY(killall5, "?o*ls:[!lo]", TOYFLAG_SBIN))
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
9
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
10 config KILLALL5
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
11 bool "killall5"
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
12 default n
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
13 help
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
14 usage: killall5 [-l] [-SIGNAL|-s SIGNAL] [-o PID]...
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
15
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
16 Send a signal (default: TERM) to all processes outside current session.
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
17
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
18 -l List all signal names and numbers
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
19 -o PID Don't signal this PID
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
20 -s send SIGNAL instead of SIGTERM
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
21 */
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
22 #define FOR_killall5
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
23 #include "toys.h"
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
24
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
25 GLOBALS(
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
26 char *signame;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
27 struct arg_list *olist;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
28 )
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
29
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
30 void killall5_main(void)
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
31 {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
32 DIR *dp;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
33 struct dirent *entry;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
34 int signo, pid, sid, signum = SIGTERM;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
35 long *olist = NULL, ocount = 0;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
36 char *s, **args = toys.optargs;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
37
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
38 // list all signal names and numbers
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
39 if (toys.optflags & FLAG_l) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
40 if (*args) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
41 for (; *args; args++) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
42 signo = sig_to_num(*args);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
43 if (isdigit(**args) && (s = num_to_sig(signo&127))) xputs(s);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
44 else if (signo > 0) xprintf("%d\n", signo);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
45 else error_exit("UNKNOWN signal '%s'", *args);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
46 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
47 } else sig_to_num(NULL);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
48 return;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
49 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
50
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
51 // when SIGNUM will be in the form of -SIGNUM
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
52 if (TT.signame || (*args && **args == '-')) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
53 if (0 > (signum = sig_to_num(TT.signame ? TT.signame : (*args)+1)))
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
54 error_exit("Unknown signal '%s'", *args);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
55 if (!TT.signame) args++;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
56 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
57 pid = getpid();
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
58 sid = getsid(pid);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
59
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
60 // prepare omit list
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
61 if (toys.optflags & FLAG_o) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
62 struct arg_list *ptr = TT.olist;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
63
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
64 if (*args) error_exit("invalid omit list");
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
65 for (; ptr; ptr=ptr->next) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
66 long val = atolx(ptr->arg);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
67 olist = xrealloc(olist, (ocount+1)*sizeof(long));
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
68 olist[ocount++] = val;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
69 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
70 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
71
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
72 if (!(dp = opendir("/proc"))) perror_exit("opendir");
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
73 while ((entry = readdir(dp))) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
74 int count, procpid, procsid;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
75
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
76 if (!(procpid = atoi(entry->d_name))) continue;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
77 snprintf(toybuf, sizeof(toybuf), "/proc/%d/stat", procpid);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
78 if (!readfile(toybuf, toybuf, sizeof(toybuf))) continue;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
79 if (sscanf(toybuf, "%*d %*s %*c %*d %*d %d", &procsid) != 1) continue;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
80 if (pid == procpid || sid == procsid || procpid == 1) continue;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
81
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
82 // Check for kernel threads.
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
83 snprintf(toybuf, sizeof(toybuf), "/proc/%d/cmdline", procpid);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
84 if (readfile(toybuf, toybuf, sizeof(toybuf)) && !*toybuf) continue;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
85
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
86 // Check with omit list.
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
87 if (toys.optflags & FLAG_o) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
88 for (count = 0; count < ocount; count++) {
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
89 if (procpid == olist[count]) goto OMIT;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
90 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
91 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
92 kill(procpid, signum);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
93 OMIT: ;
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
94 }
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
95 closedir(dp);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
96 if (CFG_TOYBOX_FREE && olist) free(olist);
78a3eaf5555f killall5 - kill all the processes not in its session.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff changeset
97 }