Determining the particular processor on which a process is running
ps
can give you that information if you ask for the psr
column (or use the -F
flag which includes it).
Ex:
$ ps -F $$
UID PID PPID C SZ RSS PSR STIME TTY STAT TIME CMD
me 6415 6413 0 5210 2624 2 18:52 pts/0 SN 0:00 -su
Or:
$ ps -o pid,psr,comm -p $$
PID PSR COMMAND
6415 0 bash
My shell was running on CPU 2 when I ran the first command, on CPU 0 when I ran the second. Beware that processes can change CPUs very, very quickly so the information you actually see is, essentially, already stale.
Some more info in this Super User question's answers:
Linux: command to know the processor number in which a process is loaded?
With the top
from procps
(generally the default on Linux distributions nowadays), in top
, press f, navigate to P = Last User CPU (SMP)
and press Space to select (you can also move the field for instance before the COMMAND
field with the Right key and then move up and down). q to return to the main screen (where you'll see your process move from processor to processor unless you explicitly configured it to stay with one). You can press W to save that as the default.
Press ? for help.
The command taskset
is what you're looking for:
taskset - retrieve or set a process's CPU affinity
Example
$ taskset -p 12345
pid 12345's current affinity mask: f
A mask of f
means all processors, 0x00000001
would be just processor 0.
$ taskset -c -p 24389
pid 24389's current affinity list: 0-3
Shows the cpu's in list format. I have 4 cores on my laptop in this example.
See the man page has more details.