1/* vi: set sw=4 ts=4: */ 2/* 3 * nice implementation for busybox 4 * 5 * Copyright (C) 2005 Manuel Novoa III <mjn3@codepoet.org> 6 * 7 * Licensed under GPLv2 or later, see file LICENSE in this source tree. 8 */ 9//config:config NICE 10//config: bool "nice (1.8 kb)" 11//config: default y 12//config: help 13//config: nice runs a program with modified scheduling priority. 14 15//applet:IF_NICE(APPLET_NOEXEC(nice, nice, BB_DIR_BIN, BB_SUID_DROP, nice)) 16 17//kbuild:lib-$(CONFIG_NICE) += nice.o 18 19//usage:#define nice_trivial_usage 20//usage: "[-n ADJUST] [PROG ARGS]" 21//usage:#define nice_full_usage "\n\n" 22//usage: "Change scheduling priority, run PROG\n" 23//usage: "\n -n ADJUST Adjust priority by ADJUST" 24 25#include "libbb.h" 26 27int nice_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 28int nice_main(int argc UNUSED_PARAM, char **argv) 29{ 30 int old_priority, adjustment; 31 32 old_priority = getpriority(PRIO_PROCESS, 0); 33 34 if (!*++argv) { /* No args, so (GNU) output current nice value. */ 35 printf("%d\n", old_priority); 36 fflush_stdout_and_exit(EXIT_SUCCESS); 37 } 38 39 adjustment = 10; /* Set default adjustment. */ 40 41 if (argv[0][0] == '-') { 42 char *nnn = argv[0] + 1; 43 if (nnn[0] == 'n') { /* -n */ 44 nnn += 1; 45 if (!nnn[0]) { /* "-n NNN" */ 46 nnn = *++argv; 47 } 48 /* else: "-nNNN" (w/o space) */ 49 } 50 /* else: "-NNN" (NNN may be negative) - same as "-n NNN" */ 51 52 if (!nnn || !argv[1]) { /* Missing priority or PROG! */ 53 bb_show_usage(); 54 } 55 adjustment = xatoi_range(nnn, INT_MIN/2, INT_MAX/2); 56 argv++; 57 } 58 59 { /* Set our priority. */ 60 int prio = old_priority + adjustment; 61 62 if (setpriority(PRIO_PROCESS, 0, prio) < 0) { 63 bb_perror_msg_and_die("setpriority(%d)", prio); 64 } 65 } 66 67 BB_EXECVP_or_die(argv); 68} 69