skill: support usage output to stdout & stderr

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2011-10-22 19:06:06 +02:00
parent 89e1a83c07
commit 4ea27a7716

92
skill.c
View File

@ -261,70 +261,70 @@ static void iterate(struct run_time_conf_t *run_time)
} }
/* kill help */ /* kill help */
static void __attribute__ ((__noreturn__)) kill_usage(void) static void __attribute__ ((__noreturn__)) kill_usage(FILE * out)
{ {
fputs(USAGE_HEADER, stderr); fputs(USAGE_HEADER, out);
fprintf(stderr, fprintf(out,
" %s [options] <pid> [...]\n", program_invocation_short_name); " %s [options] <pid> [...]\n", program_invocation_short_name);
fputs(USAGE_OPTIONS, stderr); fputs(USAGE_OPTIONS, out);
fputs(_(" <pid> [...] send SIGTERM to every <pid> listed\n"), stderr); fputs(_(" <pid> [...] send SIGTERM to every <pid> listed\n"), out);
fputs(_(" -<signal> specify the <signal> to be sent\n"), stderr); fputs(_(" -<signal> specify the <signal> to be sent\n"), out);
fputs(_(" -s <signal> specify the <signal> to be sent\n"), stderr); fputs(_(" -s <signal> specify the <signal> to be sent\n"), out);
fputs(_(" -l list all signal names\n"), stderr); fputs(_(" -l list all signal names\n"), out);
fputs(_(" -L list all signal names in a nice table\n"), stderr); fputs(_(" -L list all signal names in a nice table\n"), out);
fputs(_(" -l <signal> convert between signal numbers and names\n"), stderr); fputs(_(" -l <signal> convert between signal numbers and names\n"), out);
fputs(USAGE_SEPARATOR, stderr); fputs(USAGE_SEPARATOR, out);
fprintf(stderr, USAGE_MAN_TAIL("skill(1)")); fprintf(out, USAGE_MAN_TAIL("skill(1)"));
exit(1); exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
} }
/* skill and snice help */ /* skill and snice help */
static void __attribute__ ((__noreturn__)) skillsnice_usage(void) static void __attribute__ ((__noreturn__)) skillsnice_usage(FILE * out)
{ {
fputs(USAGE_HEADER, stderr); fputs(USAGE_HEADER, out);
if (program == PROG_SKILL) { if (program == PROG_SKILL) {
fprintf(stderr, fprintf(out,
" %s [signal] [options] <expression>\n", " %s [signal] [options] <expression>\n",
program_invocation_short_name); program_invocation_short_name);
} else { } else {
fprintf(stderr, fprintf(out,
" %s [new priority] [options] <expression>\n", " %s [new priority] [options] <expression>\n",
program_invocation_short_name); program_invocation_short_name);
} }
fputs(USAGE_OPTIONS, stderr); fputs(USAGE_OPTIONS, out);
fputs(_(" -f fast mode (not implemented)\n"), stderr); fputs(_(" -f fast mode (not implemented)\n"), out);
fputs(_(" -i interactive\n"), stderr); fputs(_(" -i interactive\n"), out);
fputs(_(" -l list all signal names\n"), stderr); fputs(_(" -l list all signal names\n"), out);
fputs(_(" -L list all signal names in a nice table\n"), fputs(_(" -L list all signal names in a nice table\n"),
stderr); out);
fputs(_(" -n no action\n"), stderr); fputs(_(" -n no action\n"), out);
fputs(_(" -v explain what is being done\n"), stderr); fputs(_(" -v explain what is being done\n"), out);
fputs(_(" -w enable warnings (not implemented)\n"), stderr); fputs(_(" -w enable warnings (not implemented)\n"), out);
fputs(USAGE_VERSION, stderr); fputs(USAGE_VERSION, out);
fputs(_("\n"), stderr); fputs(_("\n"), out);
fputs(_("Expression can be: terminal, user, pid, command.\n"), stderr); fputs(_("Expression can be: terminal, user, pid, command.\n"), out);
fputs(_("The options below may be used to ensure correct interpretation.\n"), stderr); fputs(_("The options below may be used to ensure correct interpretation.\n"), out);
fputs(_(" -c <command> expression is a command name\n"), stderr); fputs(_(" -c <command> expression is a command name\n"), out);
fputs(_(" -p <pid> expression is a process id number\n"), stderr); fputs(_(" -p <pid> expression is a process id number\n"), out);
fputs(_(" -t <tty> expression is a terminal\n"), stderr); fputs(_(" -t <tty> expression is a terminal\n"), out);
fputs(_(" -u <username> expression is a username\n"), stderr); fputs(_(" -u <username> expression is a username\n"), out);
if (program == PROG_SKILL) { if (program == PROG_SKILL) {
fprintf(stderr, fprintf(out,
_("\n" _("\n"
"The default signal is TERM. Use -l or -L to list available signals.\n" "The default signal is TERM. Use -l or -L to list available signals.\n"
"Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.\n" "Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0.\n"
"Alternate signals may be specified in three ways: -SIGKILL -KILL -9\n")); "Alternate signals may be specified in three ways: -SIGKILL -KILL -9\n"));
fprintf(stderr, USAGE_MAN_TAIL("skill(1)")); fprintf(out, USAGE_MAN_TAIL("skill(1)"));
} else { } else {
fprintf(stderr, fprintf(out,
_("\n" _("\n"
"The default priority is +4. (snice +4 ...)\n" "The default priority is +4. (snice +4 ...)\n"
"Priority numbers range from +20 (slowest) to -20 (fastest).\n" "Priority numbers range from +20 (slowest) to -20 (fastest).\n"
"Negative priority numbers are restricted to administrative users.\n")); "Negative priority numbers are restricted to administrative users.\n"));
fprintf(stderr, USAGE_MAN_TAIL("snice(1)")); fprintf(out, USAGE_MAN_TAIL("snice(1)"));
} }
exit(1); exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS);
} }
/* kill */ /* kill */
@ -347,7 +347,7 @@ static void __attribute__ ((__noreturn__))
}; };
if (argc < 2) if (argc < 2)
kill_usage(); kill_usage(stderr);
signo = skill_sig_option(&argc, argv); signo = skill_sig_option(&argc, argv);
if (signo < 0) if (signo < 0)
@ -378,12 +378,12 @@ static void __attribute__ ((__noreturn__))
signo = signal_name_to_number(optarg); signo = signal_name_to_number(optarg);
break; break;
case 'h': case 'h':
kill_usage(); kill_usage(stdout);
case 'V': case 'V':
display_kill_version(); display_kill_version();
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
default: default:
kill_usage(); kill_usage(stderr);
} }
argc -= optind + sigopt; argc -= optind + sigopt;
@ -404,7 +404,7 @@ static void __attribute__ ((__noreturn__))
static void _skillsnice_usage(int line) static void _skillsnice_usage(int line)
{ {
fprintf(stderr, _("Something at line %d.\n"), line); fprintf(stderr, _("Something at line %d.\n"), line);
skillsnice_usage(); skillsnice_usage(stderr);
} }
#define skillsnice_usage() _skillsnice_usage(__LINE__) #define skillsnice_usage() _skillsnice_usage(__LINE__)
@ -487,7 +487,7 @@ static void skillsnice_parse(int argc,
}; };
if (argc < 2) if (argc < 2)
skillsnice_usage(); skillsnice_usage(stderr);
sig_or_pri = -1; sig_or_pri = -1;
@ -538,7 +538,7 @@ static void skillsnice_parse(int argc,
char path[32]; char path[32];
if (!optarg) if (!optarg)
/* Huh? Maybe "skill -t ''". */ /* Huh? Maybe "skill -t ''". */
skillsnice_usage(); skillsnice_usage(stderr);
snprintf(path, 32, "/dev/%s", optarg); snprintf(path, 32, "/dev/%s", optarg);
if (stat(path, &sbuf) >= 0 if (stat(path, &sbuf) >= 0
&& S_ISCHR(sbuf.st_mode)) { && S_ISCHR(sbuf.st_mode)) {
@ -582,12 +582,12 @@ static void skillsnice_parse(int argc,
run_time->warnings = 1; run_time->warnings = 1;
break; break;
case 'h': case 'h':
skillsnice_usage(); skillsnice_usage(stdout);
case 'V': case 'V':
display_kill_version(); display_kill_version();
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
default: default:
skillsnice_usage(); skillsnice_usage(stderr);
} }
argc -= optind; argc -= optind;