9 #include <sys/resource.h>
11 int main(int argc,char **argv) {
13 int mrenice,wrenice,newprio,eflag;
20 fputs("usernice: too few args\n"
21 " usage: usernice <nicelevel> <command> <arguments>\n"
22 " usernice <nicelevel>p <pid> <pid> ...\n"
23 " usernice <nicelevel>u <username|uid> ...\n",
27 l= strtol(*++argv,&ep,10);
28 if (*ep == 'p' || *ep == 'u') { mrenice= *ep++; }
29 if (*ep) { fputs("usernice: priority not numeric or bad flags\n",stderr); exit(-1); }
31 { fputs("usernice: priority must be -20 .. 20\n",stderr); exit(-1); }
37 wrenice= PRIO_PROCESS;
38 l= strtoul(*argv,&ep,10);
40 fprintf(stderr,"usernice: pid `%s' not numeric\n",*argv); eflag=2;
45 l= strtoul(*argv,&ep,10);
49 fprintf(stderr,"usernice: unknown user `%s'\n",*argv); eflag=2;
55 if (setpriority(wrenice,l,newprio)) {
56 perror(*argv); if (!eflag) eflag=1;
61 if (setpriority(PRIO_PROCESS,0,newprio))
62 { perror("usernice: setpriority"); exit(-1); }
63 ruid= getuid(); if (ruid == (uid_t)-1) { perror("usernice: getuid"); exit(-1); }
64 if (setreuid(ruid,ruid)) { perror("usernice: setreuid"); exit(-1); }
65 execvp(argv[1],argv+1); perror("usernice: exec"); exit(-1);