]> Zhao Yanbai Git Server - minix.git/commitdiff
New nice utility, imported from FreeBSD, used to run processes at a different
authorBen Gras <ben@minix3.org>
Fri, 1 Jul 2005 18:00:10 +0000 (18:00 +0000)
committerBen Gras <ben@minix3.org>
Fri, 1 Jul 2005 18:00:10 +0000 (18:00 +0000)
priority.

commands/simple/Makefile
commands/simple/nice.c [new file with mode: 0644]

index 524bd740b755ce6b84f7247b3a9c1cdd44630701..60f8e5c53f8b050aa50f403942bc336241312f86 100755 (executable)
@@ -124,6 +124,7 @@ ALL = \
        mt \
        nm \
        nonamed \
+       nice \
        od \
        passwd \
        paste \
@@ -539,6 +540,10 @@ nm:        nm.c
        $(CCLD) -o $@ $?
        @install -S 32kw $@
 
+nice:  nice.c
+       $(CCLD) -o $@ $?
+       @install -S 8kw $@
+
 nonamed:       nonamed.c
        $(CCLD) -o $@ $?
        @install -S 8kw $@
@@ -933,6 +938,7 @@ install:    \
        /usr/bin/mount \
        /usr/bin/mt \
        /usr/bin/nm \
+       /usr/bin/nice \
        /usr/bin/nonamed \
        /usr/bin/od \
        /usr/bin/passwd \
@@ -1316,6 +1322,9 @@ install:  \
 /usr/bin/nm:   nm
        install -cs -o bin $? $@
 
+/usr/bin/nice: nice
+       install -cs -o bin $? $@
+
 /usr/bin/nonamed:      nonamed
        install -cs -o bin $? $@
 
diff --git a/commands/simple/nice.c b/commands/simple/nice.c
new file mode 100644 (file)
index 0000000..db25163
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 1989, 1993, 1994
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+
+#include <ctype.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+
+#define        DEFNICE 10
+
+void usage(void);
+
+int
+main(int argc, char *argv[])
+{
+       long niceness = DEFNICE;
+       int ch;
+       char *ep;
+       char arg1[10];
+
+       /* Obsolescent syntax: -number, --number */
+       if (argc >= 2 && argv[1][0] == '-' && (argv[1][1] == '-' ||
+           isdigit((unsigned char)argv[1][1])) && strcmp(argv[1], "--") != 0) {
+               snprintf(arg1, sizeof(arg1), "-n%s", argv[1] + 1);
+               argv[1] = arg1;
+       }
+
+       while ((ch = getopt(argc, argv, "n:")) != -1) {
+               switch (ch) {
+               case 'n':
+                       errno = 0;
+                       niceness = strtol(optarg, &ep, 10);
+                       if (ep == optarg || *ep != '\0' || errno ||
+                           niceness < INT_MIN || niceness > INT_MAX) {
+                               fprintf(stderr, "%s: invalid nice value", optarg);
+                               return 1;
+                       }
+                       break;
+               default:
+                       usage();
+               }
+       }
+       argc -= optind;
+       argv += optind;
+
+       if (argc == 0)
+               usage();
+
+       errno = 0;
+       niceness += getpriority(PRIO_PROCESS, 0);
+       if (errno) {
+               perror("getpriority");
+               return 1;
+       }
+       if (setpriority(PRIO_PROCESS, 0, (int)niceness)) {
+               perror("setpriority");
+               return 1;
+       }
+       errno = 0;
+       execvp(*argv, argv);
+       perror("execvp");
+       return 1;
+}
+
+void
+usage(void)
+{
+
+       (void)fprintf(stderr, "usage: nice [-n incr] utility [arguments]\n");
+       exit(1);
+}