プロセスが実行されている特定のプロセッサを確認する

プロセスが実行されている特定のプロセッサを確認する

Linuxクラスタの8コアノードにアクセスできます。ノードにログインすると、以下を使用してプロセッサのリストを表示できます。

more /proc/cpuinfo

私の8コアノードでは、プロセッサ番号は0から7までです。各プロセッサはIntel Xeon CPU(E5430 @ 2.66 GHz)です。

fooさて、いくつかのパラメータを使ってこのプログラムを呼び出すとしましょうargs

foo args

プロシージャfooの実行には長い時間がかかります(例:数時間または数日)。電話後にfoo確認できますか?特別などのプロセッサ(例:0〜7)がfoo実行されていますか?プログラムtopにプロセスIDと同様の情報が表示されますが、プロセッサは表示されません。数字。そんな情報がありますか?

答え1

psこの情報は、あなたが列を要求した場合psr(または-Fその列を含むフラグを使用している場合)に提供されることがあります。

前任者:

$ 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

または:

$ ps -o pid,psr,comm -p $$
  PID PSR COMMAND
 6415   0 bash

最初のコマンドを実行すると、私のシェルはCPU 2で実行され、2番目のコマンドを実行すると、私のシェルはCPU 0で実行されます。プロセスはCPUを非常に迅速に変更できるため、実際に表示される情報は本質的に古い情報です。

このスーパーユーザーの質問に対する回答には、より多くの情報があります。

Linux:ロードされたプロセスのプロセッサ番号を知るコマンドですか?

答え2

topfrom procps(通常は現在のLinuxディストリビューションのデフォルト)を使用し、inをtop押してfに移動し、次にクリックP = Last User CPU (SMP)を選択します(たとえば、フィールドの前と上または下にSpaceキーを使用してフィールドを移動することもできます)。メイン画面に戻ります。あるプロセッサに留まるように明示的に設定しない限り、プロセスがあるプロセッサから別のプロセッサに移動することがわかります。を押すとデフォルトで保存できます。COMMANDRightqW

助けが必要な場合はタップしてください?

答え3

このコマンドはtasksetあなたが探しているものです:

ワークセット - プロセスの CPU アフィニティを取得または設定します。

はい

$ taskset -p 12345
pid 12345's current affinity mask: f

マスクは、プロセッサ0のみを含むfすべてのプロセッサを表します0x00000001

$ taskset -c -p 24389 
pid 24389's current affinity list: 0-3

CPUをリスト形式で表示します。この例では、私のラップトップには4つのコアがあります。

よりマニュアルページに詳細があります。

答え4

この情報はから直接入手することもできます/proc/[pid]/stat。これはスペースで区切られた39番目のフィールドです(Linux 2.2.8以降)。

たとえば、現在シェルが実行されているCPUプロセッサを表示するには(この場合):

cat  /proc/$$/stat | cut -d' ' -f39

関連情報