summaryrefslogtreecommitdiffstats
path: root/schedutils/ionice.c
diff options
context:
space:
mode:
authorKarel Zak2011-07-22 11:15:28 +0200
committerKarel Zak2011-07-22 11:24:05 +0200
commitfcc2b2da4ca5efcc82d31b11cdb9b16f90cd31c3 (patch)
tree03df24df781ecf570f31944873bcd51459c1f545 /schedutils/ionice.c
parentlsblk: ignore device if disappear while processing (diff)
downloadkernel-qcow2-util-linux-fcc2b2da4ca5efcc82d31b11cdb9b16f90cd31c3.tar.gz
kernel-qcow2-util-linux-fcc2b2da4ca5efcc82d31b11cdb9b16f90cd31c3.tar.xz
kernel-qcow2-util-linux-fcc2b2da4ca5efcc82d31b11cdb9b16f90cd31c3.zip
ionice: improve command line interpretation
ionice : print the current I/O prio. ionice COMMAND : exec command with default (best-effort) class ionice -p PID [...] : return info about the PID(s) ionice -c CLASS COMMAND : exec command with the class ionice -c CLASS -p PID [...] : modify PID(s) class This should be backwardly compatible and also compatible with nice(1) from coreutils. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'schedutils/ionice.c')
-rw-r--r--schedutils/ionice.c47
1 files changed, 28 insertions, 19 deletions
diff --git a/schedutils/ionice.c b/schedutils/ionice.c
index 7c6897f08..f1db216ef 100644
--- a/schedutils/ionice.c
+++ b/schedutils/ionice.c
@@ -151,11 +151,6 @@ int main(int argc, char **argv)
usage(stderr);
}
- if (!set && !pid && optind == argc)
- errx(EXIT_FAILURE, _("PID or COMMAND not specified"));
- if (!set && !pid)
- errx(EXIT_FAILURE, _("scheduling for the COMMAND not specified"));
-
switch (ioclass) {
case IOPRIO_CLASS_NONE:
if (set & 1)
@@ -174,28 +169,42 @@ int main(int argc, char **argv)
errx(EXIT_FAILURE, _("bad prio class %d"), ioclass);
}
- if (!set) {
+ if (!set && !pid && optind == argc)
+ /*
+ * ionice without options, print the current ioprio
+ */
+ ioprio_print(0);
+
+ else if (!set && pid) {
+ /*
+ * ionice -p PID [PID ...]
+ */
ioprio_print(pid);
for(; argv[optind]; ++optind) {
pid = strtol_or_err(argv[optind], _("failed to parse pid"));
ioprio_print(pid);
}
- } else {
- if (pid) {
- ioprio_setpid(pid, ioclass, data);
+ } else if (set && pid) {
+ /*
+ * ionice -c CLASS -p PID [PID ...]
+ */
+ ioprio_setpid(pid, ioclass, data);
- for(; argv[optind]; ++optind) {
- pid = strtol_or_err(argv[optind], _("failed to parse pid"));
- ioprio_setpid(pid, ioclass, data);
- }
- } else if (argv[optind]) {
- ioprio_setpid(0, ioclass, data);
- execvp(argv[optind], &argv[optind]);
- /* execvp should never return */
- err(EXIT_FAILURE, _("executing %s failed"), argv[optind]);
+ for(; argv[optind]; ++optind) {
+ pid = strtol_or_err(argv[optind], _("failed to parse pid"));
+ ioprio_setpid(pid, ioclass, data);
}
- }
+ } else if (argv[optind]) {
+ /*
+ * ionice [-c CLASS] COMMAND
+ */
+ ioprio_setpid(0, ioclass, data);
+ execvp(argv[optind], &argv[optind]);
+ err(EXIT_FAILURE, _("executing %s failed"), argv[optind]);
+ } else
+ usage(stderr);
+
return EXIT_SUCCESS;
}