Linuxスレッドまたはフォークされたプロセスは、ps
ファイルシステムおよび/またはそのコマンドラインに表示される名前を変更できます/proc
。
このパッケージを使用すると、、、、およびの2番目のフィールドpython-setproctitle
にも同じ変更が発生します。これには全長のみが表示され、変更された名前の最初の15文字は残りの3つの場所に表示されます。/proc/pid/cmdline
/proc/pid/comm
Name:
/proc/pid/status
/proc/pid/stat
cmdline
マルチスレッドプロセスを見ると、ruby
外観は/proc/pid/cmdline
変わりませんが、他の3つの場所には15文字の切り捨てられたスレッド名が表示されます。
man prctl
Tellsは/proc/pid/comm
システムコールの動作によってPR_SET_NAME
変更されますが、およびについては何もprctl
言いません。/proc/pid/status
/proc/pid/stat
man proc
/proc/pid/comm
スーパーセットが提供されるとし、これ以上のprctl PR_SET_NAME
説明は省略します。
これは、プロセスが置き換えられても、2番目のフィールドを引き続き/proc/pid/stat
使用できることを示しています。
JVMプロセスを観察するときに言及されたすべての場所はすべてのスレッドに同じコンテンツを提供します(表示されているすべての場所をcmdline
除く3つの場所java
)、jcmd pid Thread.print
まだ既存のスレッドに対して別のスレッド名を表示するため、Javaスレッドはいくつかの非標準メカニズムを使用して名前を変えてください。
行と2番目のフィールドは常に/proc/pid/comm
同じですか、それとも3つの場所のうちの1つが異なる内容を提供する場合はありますか?違いがある場合(簡単に再現できる)例を提供してください。Name:
/proc/pid/status
/proc/pid/stat
答え1
3つの項目はすべて、カーネルソースコードに厳密に定義されています。comm
、stat
とstatus
。ジョブはそこから開始してcomm
処理されます。comm_show
どの電話proc_task_name
ジョブ名を決定します。stat
によって処理されたproc_tgid_stat
、薄い包装紙です。do_task_stat
、どちら着信電話proc_task_name
ジョブ名を決定します。status
によって処理されたproc_pid_status
proc_task_name
、ジョブ名を決定するために呼び出されます。
はいcomm
。 「名前」行とstatus
2番目のフィールドは両方ともstat
同じ値を表示します。唯一の変更は、値がエスケープされるかどうかです。値はstatus
エスケープされ(特殊文字は置き換えられます)、残りはそうではありません。