1/* See LICENSE file for copyright and license details. */
2
3#include <sys/resource.h>
4
5#include <errno.h>
6#include <stdlib.h>
7#include <unistd.h>
8
9#include "util.h"
10#include "wexec.h"
11
12#ifndef PRIO_MIN
13#define PRIO_MIN -NZERO
14#endif
15
16#ifndef PRIO_MAX
17#define PRIO_MAX (NZERO - 1)
18#endif
19
20static void
21usage(void)
22{
23 eprintf("usage: %s [-n inc] cmd [arg ...]\n", argv0);
24}
25
26// ?man nice: run command with modified priority
27// ?man arguments: cmd [arg ...]
28// ?man run a command with modified scheduling priority
29int
30main(int argc, char *argv[])
31{
32 int val = 10, r, savederrno;
33
34 ARGBEGIN
35 {
36 // ?man -n:num: print line numbers or counts
37 case 'n':
38 val = estrtonum(EARGF(usage()), PRIO_MIN, PRIO_MAX);
39 break;
40 default:
41 usage();
42 break;
43 }
44 ARGEND
45
46 if (!argc)
47 usage();
48
49 errno = 0;
50 r = getpriority(PRIO_PROCESS, 0);
51 if (errno)
52 weprintf("getpriority:");
53 else
54 val += r;
55 LIMIT(val, PRIO_MIN, PRIO_MAX);
56 if (setpriority(PRIO_PROCESS, 0, val) < 0)
57 weprintf("setpriority:");
58
59 wexecvp_self(argv[0], argv);
60 savederrno = errno;
61 weprintf("wexecvp %s:", argv[0]);
62
63 _exit(126 + (savederrno == ENOENT));
64}