needs-restarting コマンドのソースコードを読んでみよう

RHEL系OSで何かと便利な yum-utilsneeds-restarting コマンド。 なんと、githubでコードが公開されていた (しかも、みんな大好きPython) 。 このリポジトリが正式なものかよくわからんが、一応、CentOSに入っているものと大体同じ雰囲気だった。

適当に斜め読みしただけだが、肝はここらへんかと….

  1. 起動しているプロセスの全pidについてループ
    1. プロセスが開いているファイルを収集
    2. インストール済みのRPMのうち、収集したファイルを提供しているRPMを探す
    3. RPMインストール日時がプロセスの起動日時より新しい場合は要リスタート判定
    4. その他、ファイルが削除された時の処理とか (読むのが面倒くさいので割愛)

ちなみに、手元のCentOS7だと、--reboothint オプションが追加されていて、下記パッケージが更新されていたら、問答無用で要OS再起動判定となるらしい。

REBOOTPKGS = ['kernel', 'glibc', 'linux-firmware', 'systemd', 'udev',
              'openssl-libs', 'gnutls', 'dbus']

lsofrpm -ql pkg_name などで調べれば、RPMインストール前に再起動が必要そうなプロセスのおおまかな見当をつけられそう。