Diffs from v2: * Use strtos32_or_err to parse pid https://github.com/util-linux/util-linux/pull/3637 This is useful to print the current mask without using `$$`: `taskset -p 0`. It is also helpful to test taskset: `taskset -c 1-4 taskset -p 0`. This is not easy with `$$`. sched_setaffinity(2)/sched_getaffinity(2) accept 0 for the calling thread, so this seems consistent. As an implementation detail, we replace 0 with getpid(), so the existing pid != 0 <==> "will exec" logic continues to work unchanged. A reasonable alternative would be to interpret just `taskset` (currently an error) as printing the current mask. This seems less orthogonal, and a better use may be found for plain `taskset` in the future. Signed-off-by: Jesse Rosenstock <jmr@xxxxxxxxxx> --- schedutils/taskset.1.adoc | 8 ++++++++ schedutils/taskset.c | 13 ++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/schedutils/taskset.1.adoc b/schedutils/taskset.1.adoc index 9384347372..45622613bd 100644 --- a/schedutils/taskset.1.adoc +++ b/schedutils/taskset.1.adoc @@ -77,6 +77,7 @@ *-p*, *--pid*:: Operate on an existing PID and do not launch a new task. +If PID is zero, then operate on the *taskset* process. include::man-common/help-version.adoc[] @@ -134,6 +135,13 @@ $ echo $? + 1 + +== EXAMPLES + +Print the current CPU affinity as a list. + +$ taskset -pc 0 + +pid 1355988's current affinity list: 0-47 + + == AUTHORS Written by Robert M. Love. diff --git a/schedutils/taskset.c b/schedutils/taskset.c index b52cd4338b..7e2ecc3365 100644 --- a/schedutils/taskset.c +++ b/schedutils/taskset.c @@ -186,7 +186,18 @@ all_tasks = 1; break; case 'p': - pid = strtopid_or_err(argv[argc - 1], _("invalid PID argument")); + /* + * strtopid_or_err() is not suitable here; 0 can be + * passed. + */ + pid = strtos32_or_err(argv[argc - 1], + _("invalid PID argument")); + if (pid == 0) + pid = getpid(); + /* + * After this point, pid == 0 means "no pid" and that + * we will exec a command. + */ break; case 'c': ts.use_list = 1;