nice.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. //usage:#define nice_trivial_usage
  10. //usage: "[-n ADJUST] [PROG ARGS]"
  11. //usage:#define nice_full_usage "\n\n"
  12. //usage: "Change scheduling priority, run PROG\n"
  13. //usage: "\n -n ADJUST Adjust priority by ADJUST"
  14. #include <sys/resource.h>
  15. #include "libbb.h"
  16. int nice_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  17. int nice_main(int argc, char **argv)
  18. {
  19. int old_priority, adjustment;
  20. old_priority = getpriority(PRIO_PROCESS, 0);
  21. if (!*++argv) { /* No args, so (GNU) output current nice value. */
  22. printf("%d\n", old_priority);
  23. fflush_stdout_and_exit(EXIT_SUCCESS);
  24. }
  25. adjustment = 10; /* Set default adjustment. */
  26. if (argv[0][0] == '-') {
  27. if (argv[0][1] == 'n') { /* -n */
  28. if (argv[0][2]) { /* -nNNNN (w/o space) */
  29. argv[0] += 2; argv--; argc++;
  30. }
  31. } else { /* -NNN (NNN may be negative) == -n NNN */
  32. argv[0] += 1; argv--; argc++;
  33. }
  34. if (argc < 4) { /* Missing priority and/or utility! */
  35. bb_show_usage();
  36. }
  37. adjustment = xatoi_range(argv[1], INT_MIN/2, INT_MAX/2);
  38. argv += 2;
  39. }
  40. { /* Set our priority. */
  41. int prio = old_priority + adjustment;
  42. if (setpriority(PRIO_PROCESS, 0, prio) < 0) {
  43. bb_perror_msg_and_die("setpriority(%d)", prio);
  44. }
  45. }
  46. BB_EXECVP_or_die(argv);
  47. }