pbind(8) on Solnix vs Linux and the BSDs
pbind is the illumos command at /usr/sbin/pbind. It binds processes or LWPs to a processor by numeric processor ID, queries those bindings and removes them. It is not a flag-for-flag match for Linux taskset, FreeBSD cpuset or NetBSD schedctl: it binds to one processor ID, not to a mask or CPU list.
The manual pages
- Solnix: pbind(8) from
pkgs.solnix.illumos-world-man· illumos.org - Linux: taskset(1) util-linux-2.42.3 (different command, similar job)
- FreeBSD: cpuset(1) 15.1-RELEASE (different command, similar job)
- NetBSD: schedctl(8) 11.0 (different command, similar job)
What Solnix runs
A default Solnix system runs the illumos pbind at /usr/sbin/pbind. No other variants are shipped. Use psrinfo(8) to see which processors are available, and psrset(8) for processor sets.
Differences
| Compared with | Topic | What differs |
|---|---|---|
| Linux, FreeBSD, NetBSD | one processor vs a set | Solnix pbind -b and -e take a single processor_id, which must be present and on-line. Linux taskset takes a hex mask or a --cpu-list. FreeBSD cpuset -l takes a cpu-list. NetBSD schedctl -A takes comma-separated processors.Source: Solnix pbind(8) SYNOPSIS, DESCRIPTION; Linux taskset(1) -c; FreeBSD cpuset(1) -l; NetBSD schedctl(8) -A |
| Linux, FreeBSD, NetBSD | binding is not exclusive | A bound LWP runs only on its processor, except when it needs a resource that only another processor provides. The processor can still run other LWPs. The other pages do not describe an exception for resources. Source: Solnix pbind(8) DESCRIPTION; Linux taskset(1) DESCRIPTION; FreeBSD cpuset(1) DESCRIPTION; NetBSD schedctl(8) -A |
| Linux, FreeBSD, NetBSD | launching a command | Solnix uses -e processor_id cmd [args...] to run a command bound to a processor. taskset takes mask command with no flag. cpuset takes cmd after its options. schedctl runs a command when -p is not given.Source: Solnix pbind(8) -e; Linux taskset(1) SYNOPSIS, USAGE; FreeBSD cpuset(1) SYNOPSIS; NetBSD schedctl(8) -p |
| Linux, FreeBSD, NetBSD | -p meaning | Solnix pbind has no -p; the pid is a plain operand. On Linux, FreeBSD and NetBSD, -p introduces the target pid. A script using pbind -p fails on Solnix.Source: Solnix pbind(8) SYNOPSIS, OPERANDS; Linux taskset(1) -p; FreeBSD cpuset(1) -p; NetBSD schedctl(8) -p |
| Linux, FreeBSD, NetBSD | query and unbind syntax | Solnix queries with -q (the default when no option is given), -Q for LWPs bound to given processors, and unbinds with -u or -U. Linux queries with taskset -p pid. FreeBSD queries with cpuset -g. The NetBSD page says schedctl returns current parameters, with no query flag.Source: Solnix pbind(8) -q, -Q, -u, -U; Linux taskset(1) USAGE; FreeBSD cpuset(1) -g; NetBSD schedctl(8) DESCRIPTION |
| Linux, FreeBSD, NetBSD | reverse query by processor | Solnix pbind -Q lists the LWPs bound to given processors, and -U removes all bindings to given processors. The taskset, cpuset and schedctl pages show no equivalent per-processor query or bulk unbind.Source: Solnix pbind(8) -Q, -U; Linux taskset(1) OPTIONS; FreeBSD cpuset(1) OPTIONS; NetBSD schedctl(8) OPTIONS |
| Linux, FreeBSD, NetBSD | LWP and thread selection | Solnix selects LWPs by appending /lwpid to a pid, with ranges such as 2,3,4-8, -4 and 4-. Linux uses -a for all tasks of a PID. FreeBSD uses -t tid. NetBSD uses -t lid.Source: Solnix pbind(8) OPERANDS lwpid; Linux taskset(1) -a; FreeBSD cpuset(1) -t; NetBSD schedctl(8) -t |
| Linux, FreeBSD, NetBSD | inheritance of bindings | On Solnix, new LWPs and processes created by a bound LWP inherit the binding, so binding a shell binds its commands. The other pages in the bundle do not state inheritance. Source: Solnix pbind(8) DESCRIPTION; Linux taskset(1); FreeBSD cpuset(1); NetBSD schedctl(8) |
| NetBSD | who may change bindings | Solnix lets a superuser bind any process, and other users bind processes they may signal, meaning the same effective user ID. NetBSD schedctl says only the super-user may change scheduling parameters. Source: Solnix pbind(8) DESCRIPTION; NetBSD schedctl(8) DESCRIPTION |
| FreeBSD, NetBSD | scope of the tool | pbind only handles processor binding. NetBSD schedctl also sets scheduling class and priority (-C, -P). FreeBSD cpuset also handles NUMA memory domain policy (-n), jails and irqs.Source: Solnix pbind(8) DESCRIPTION; NetBSD schedctl(8) -C, -P; FreeBSD cpuset(1) -n, -j, -x |
| Linux, FreeBSD, NetBSD | exit status | Solnix pbind exits 0 on success and >0 on error. FreeBSD cpuset documents the same. The Linux page documents 0 for success and 1 for an illegal affinity. The NetBSD page has no EXIT STATUS section. Source: Solnix pbind(8) EXIT STATUS; FreeBSD cpuset(1) EXIT STATUS; Linux taskset(1) EXIT STATUS; NetBSD schedctl(8) |
Everyday tasks
| Task | Solnix | Linux | FreeBSD | NetBSD |
|---|---|---|---|---|
| run a command on one CPU | pbind -e processor_id cmd [args...] | taskset -c cpu-list command | cpuset -l cpu-list cmd ... | schedctl -A cpus command |
| bind a running process | pbind -b processor_id pid | taskset -pc cpu-list pid | cpuset -l cpu-list -p pid | schedctl -A cpus -p pid |
| show a process's binding | pbind -q pid | taskset -p pid | cpuset -g -p pid | schedctl -p pid |
| remove a binding | pbind -u pid | — | — | schedctl -A -1 -p pid |
| bind one thread or LWP | pbind -b processor_id pid/lwpid | — | cpuset -l cpu-list -t tid | schedctl -A cpus -t lid -p pid |
| list available processors | psrinfo(8) | — | cpuset -g | — |
Standards
- POSIX: pbind is not a POSIX.1-2024 utility.
Writing portable scripts
- Do not script pbind, taskset, cpuset and schedctl as one interface: the names, the processor argument form and the query syntax all differ. Branch on which tool is present.
- On Solnix, take processor IDs from psrinfo(8), because pbind requires an existing on-line processor.
Every difference here is taken from the manual pages linked above: Solnix's published page, Linux (man-pages and the GNU and util-linux manuals), FreeBSD, OpenBSD and NetBSD. Each row names its source. Where a manual is silent, this page is too. Compiled 2026-10-26. Found a mistake? Mail hackers@lists.solnix.io.