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.