view toys/pending/renice.c @ 978:6d3c39cb8a9d

Cleanup renice and implement '|' (required option) in argument parsing.
author Rob Landley <rob@landley.net>
date Wed, 31 Jul 2013 03:24:58 -0500
parents 9a96527bea94
children
line wrap: on
line source

/* renice.c - renice process
 *
 * Copyright 2013 CE Strake <strake888 at gmail.com>
 *
 * See http://pubs.opengroup.org/onlinepubs/9699919799/utilities/
 * See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/cmdbehav.html

USE_RENICE(NEWTOY(renice, "<1gpun#|", TOYFLAG_BIN))

config RENICE
  bool "renice"
  default n
  help
    usage: renice [-gpu] -n increment ID ...
*/

#define FOR_renice
#include "toys.h"

GLOBALS(
  long nArgu;
)

void renice_main(void) {
  int which = (toys.optflags & FLAG_g) ? PRIO_PGRP :
              ((toys.optflags & FLAG_u) ? PRIO_USER : PRIO_PROCESS);
  char **arg;

  for (arg = toys.optargs; *arg; arg++) {
    char *s = *arg;
    int id = -1;

    if (toys.optflags & FLAG_u) {
      struct passwd *p = getpwnam(s);
      if (p) id = p->pw_uid;
    } else {
      id = strtol(s, &s, 10);
      if (*s) id = -1;
    }

    if (id < 0) {
      error_msg("bad '%s'", *arg);
      continue;
    }

    if (setpriority(which, id, getpriority(which, id)+TT.nArgu) < 0)
      perror_msg("setpriority %d", id);
  }
}