diff options
author | Karel Zak | 2011-07-22 11:15:28 +0200 |
---|---|---|
committer | Karel Zak | 2011-07-22 11:24:05 +0200 |
commit | fcc2b2da4ca5efcc82d31b11cdb9b16f90cd31c3 (patch) | |
tree | 03df24df781ecf570f31944873bcd51459c1f545 /schedutils/ionice.c | |
parent | lsblk: ignore device if disappear while processing (diff) | |
download | kernel-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.c | 47 |
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; } |