I have access to an 8-core node of a Linux cluster. When logged in to the node, I can see a list of processors using this command:
more /proc/cpuinfo
In my 8-core node, the processors are numbered from 0 to 7. Each processor is an Intel Xeon CPU (E5430 @ 2.66GHz).
Now suppose I call the program foo with some arguments args:
foo args
The program foo takes a long time to execute (hours or days, for example). Having called foo, is it possible to determine the particular processor (i.e., 0 to 7) on which foo is running? The top program shows me the process ID and similar information, but I don’t see the processor number. Is such information available?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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?
Method 2
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.
Method 3
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.
Method 4
You can also get this info directly from /proc/[pid]/stat. It is the 39th space-delimited field (since Linux 2.2.8).
E.g. to display which CPU processor the current shell is running on (at this instance):
cat /proc/$$/stat | cut -d' ' -f39
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0