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@google.com>
*-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[]
$ 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.
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;