kill[all[5]]: code shrink
function old new delta kill_main 992 947 -45 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
3ac1e0d753
commit
4b26f82c78
@ -60,7 +60,7 @@
|
|||||||
* This is needed to avoid collision with kill -9 ... syntax
|
* This is needed to avoid collision with kill -9 ... syntax
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int kill_main(int argc, char **argv)
|
int kill_main(int argc UNUSED_PARAM, char **argv)
|
||||||
{
|
{
|
||||||
char *arg;
|
char *arg;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
@ -79,10 +79,9 @@ int kill_main(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Parse any options */
|
/* Parse any options */
|
||||||
argc--;
|
|
||||||
arg = *++argv;
|
arg = *++argv;
|
||||||
|
|
||||||
if (argc < 1 || arg[0] != '-') {
|
if (!arg || arg[0] != '-') {
|
||||||
goto do_it_now;
|
goto do_it_now;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,13 +90,14 @@ int kill_main(int argc, char **argv)
|
|||||||
* echo "Died of SIG`kill -l $?`"
|
* echo "Died of SIG`kill -l $?`"
|
||||||
* We try to mimic what kill from coreutils-6.8 does */
|
* We try to mimic what kill from coreutils-6.8 does */
|
||||||
if (arg[1] == 'l' && arg[2] == '\0') {
|
if (arg[1] == 'l' && arg[2] == '\0') {
|
||||||
if (argc == 1) {
|
arg = *++argv;
|
||||||
|
if (!arg) {
|
||||||
/* Print the whole signal list */
|
/* Print the whole signal list */
|
||||||
print_signames();
|
print_signames();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
/* -l <sig list> */
|
/* -l <sig list> */
|
||||||
while ((arg = *++argv)) {
|
do {
|
||||||
if (isdigit(arg[0])) {
|
if (isdigit(arg[0])) {
|
||||||
signo = bb_strtou(arg, NULL, 10);
|
signo = bb_strtou(arg, NULL, 10);
|
||||||
if (errno) {
|
if (errno) {
|
||||||
@ -118,8 +118,8 @@ int kill_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
printf("%d\n", signo);
|
printf("%d\n", signo);
|
||||||
}
|
}
|
||||||
}
|
arg = *++argv;
|
||||||
/* If they specified -l, we are all done */
|
} while (arg);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,8 +127,7 @@ int kill_main(int argc, char **argv)
|
|||||||
if (killall && arg[1] == 'q' && arg[2] == '\0') {
|
if (killall && arg[1] == 'q' && arg[2] == '\0') {
|
||||||
quiet = 1;
|
quiet = 1;
|
||||||
arg = *++argv;
|
arg = *++argv;
|
||||||
argc--;
|
if (!arg)
|
||||||
if (argc < 1)
|
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
if (arg[0] != '-')
|
if (arg[0] != '-')
|
||||||
goto do_it_now;
|
goto do_it_now;
|
||||||
@ -140,8 +139,7 @@ int kill_main(int argc, char **argv)
|
|||||||
if (killall5 && arg[0] == 'o')
|
if (killall5 && arg[0] == 'o')
|
||||||
goto do_it_now;
|
goto do_it_now;
|
||||||
|
|
||||||
if (argc > 1 && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
|
if (argv[1] && arg[0] == 's' && arg[1] == '\0') { /* -s SIG? */
|
||||||
argc--;
|
|
||||||
arg = *++argv;
|
arg = *++argv;
|
||||||
} /* else it must be -SIG */
|
} /* else it must be -SIG */
|
||||||
signo = get_signum(arg);
|
signo = get_signum(arg);
|
||||||
@ -150,7 +148,6 @@ int kill_main(int argc, char **argv)
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
arg = *++argv;
|
arg = *++argv;
|
||||||
argc--;
|
|
||||||
|
|
||||||
do_it_now:
|
do_it_now:
|
||||||
pid = getpid();
|
pid = getpid();
|
||||||
@ -168,7 +165,7 @@ int kill_main(int argc, char **argv)
|
|||||||
kill(-1, SIGSTOP);
|
kill(-1, SIGSTOP);
|
||||||
/* Signal all processes except those in our session */
|
/* Signal all processes except those in our session */
|
||||||
while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
|
while ((p = procps_scan(p, PSSCAN_PID|PSSCAN_SID)) != NULL) {
|
||||||
int i;
|
char **args;
|
||||||
|
|
||||||
if (p->sid == (unsigned)sid
|
if (p->sid == (unsigned)sid
|
||||||
|| p->sid == 0 /* compat: kernel thread, don't signal it */
|
|| p->sid == 0 /* compat: kernel thread, don't signal it */
|
||||||
@ -180,18 +177,19 @@ int kill_main(int argc, char **argv)
|
|||||||
|
|
||||||
/* All remaining args must be -o PID options.
|
/* All remaining args must be -o PID options.
|
||||||
* Check p->pid against them. */
|
* Check p->pid against them. */
|
||||||
for (i = 0; i < argc; i++) {
|
args = argv;
|
||||||
|
while (*args) {
|
||||||
pid_t omit;
|
pid_t omit;
|
||||||
|
|
||||||
arg = argv[i];
|
arg = *args++;
|
||||||
if (arg[0] != '-' || arg[1] != 'o') {
|
if (arg[0] != '-' || arg[1] != 'o') {
|
||||||
bb_error_msg("bad option '%s'", arg);
|
bb_error_msg("bad option '%s'", arg);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
goto resume;
|
goto resume;
|
||||||
}
|
}
|
||||||
arg += 2;
|
arg += 2;
|
||||||
if (!arg[0] && argv[++i])
|
if (!arg[0] && *args)
|
||||||
arg = argv[i];
|
arg = *args++;
|
||||||
omit = bb_strtoi(arg, NULL, 10);
|
omit = bb_strtoi(arg, NULL, 10);
|
||||||
if (errno) {
|
if (errno) {
|
||||||
bb_error_msg("invalid number '%s'", arg);
|
bb_error_msg("invalid number '%s'", arg);
|
||||||
@ -213,14 +211,14 @@ int kill_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Pid or name is required for kill/killall */
|
/* Pid or name is required for kill/killall */
|
||||||
if (argc < 1) {
|
if (!arg) {
|
||||||
bb_error_msg("you need to specify whom to kill");
|
bb_error_msg("you need to specify whom to kill");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (killall) {
|
if (killall) {
|
||||||
/* Looks like they want to do a killall. Do that */
|
/* Looks like they want to do a killall. Do that */
|
||||||
while (arg) {
|
do {
|
||||||
pid_t* pidList;
|
pid_t* pidList;
|
||||||
|
|
||||||
pidList = find_pid_by_name(arg);
|
pidList = find_pid_by_name(arg);
|
||||||
@ -243,7 +241,7 @@ int kill_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
free(pidList);
|
free(pidList);
|
||||||
arg = *++argv;
|
arg = *++argv;
|
||||||
}
|
} while (arg);
|
||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user