ps
このフラグを持つコマンドは、-T
TID(スレッドID)とも呼ばれるSPID列を出力します。それでは、SPIDはどういう意味ですか?
ソースコードは、ps
名前が次の理由を知らないようです。
trace("-T adds strange SPID column (old sproc() threads?)\n");
https://gitlab.com/procps-ng/procps/-/blob/newlib/src/ps/parser.c#L320
答え1
引用するsproc
これは、SPIDが「共有グループプロセスID」のようなものを参照できることを示すIRIX(Linuxのスレッドと同様)に新しい「共有グループ」プロセスを作成します。
おわかりのように、実際にはLinuxのスレッドIDがps
SPID列に表示されます。つまりカーネルの観点から見たプロセスID(ps
PID列に表示されるプロセスIDは、カーネルの観点から見たプロセスグループIDです)。これは、このオプションを使用してLWP列に表示される情報と同じです-L
。これが実際にIRIXの動作であるかどうかはわかりません。IRIX のps
マニュアルページ-T
オプションを次のように記録するSPID列については言及していません。
個々のカーネルスレッドのデータを一覧表示します。一般的に提供される情報は、プロセス内のすべてのスレッドの合計です。これは、POSIXスレッドプロセスを調べるときに便利です。
答え2
procpsのSPIDはps
TIDまたはスレッドIDを表示します。プロセスまたはスレッドプロセスIDを表示するPIDおよびTGID列とは対照的です。
プロセスは同じプロセスIDとスレッドIDを持ちます。プロセスのすべてのスレッドもプロセスIDを共有しますが、スレッドIDは異なります。
$ ps -L -o pid,tgid,tid,spid,cmd 232810
PID TGID TID SPID CMD
232810 232810 232810 232810 /usr/libexec/gnome-terminal-server
232810 232810 232811 232811 /usr/libexec/gnome-terminal-server
232810 232810 232813 232813 /usr/libexec/gnome-terminal-server
232810 232810 232814 232814 /usr/libexec/gnome-terminal-server
メインプロセス232810と3つのスレッド232811、232813、232814があります。
tid と spid は別名で、両方とも同じ関数を呼び出して同じ値を出力します。違いは、SPIDはSGIオペレーティングシステムからのもので、TIDはAIXからのものです。