カーネルに最後に割り当てられたPIDを監視する方法は?

カーネルに最後に割り当てられたPIDを監視する方法は?

プロセス生成を監視するために、カーネルが割り当てた最後のPIDを定期的に書きたいと思います。どのファイルタイムスタンプを持つシステムのプロセス(PIDモニターによって生成されたプロセスだけでなく)(追加プロセスの生成を防ぐためにデーモンを使用)、どの言語でも可能ですが、POSIXシェルではこれが可能であると思います。

ベストアンサー1

これにより、Bashは毎秒タイムスタンプと最後のPIDファイルを保存します。ns_last_pidシステム制御:

このsysctlを使用して、ジョブの現在のpid名前空間に割り当てられた最後のpid。

old=""
while read < /proc/sys/kernel/ns_last_pid
do
    if [ "$REPLY" != "$old" ]
    then
        printf '%(%s)T %d\n' -1 "$REPLY"
        old=$REPLY
    fi
    read -t 1 || true
done > pids.log

質問:

  • /proc/sys/kernel/ns_last_pidただLinux 3.3で利用可能そして最新
  • 指定子printf %(fmt)TのみBash 4.2で利用可能そして最新
  • POSIXreadそのようなオプションはありません-t
  • 追加のPIDを使用しているため、内蔵されていない機能はsleep使用できません。cat

おすすめ記事