Linux 特定の共有ライブラリをロードしているプロセスを調べる - TK's HP
ふと自分の作った共有ライブラリを使用しているプロセスだけを表示したくなったので調べてみました。psコマンドではどうやらできないようなので、複数のコマンドを組み合わせて実行しました。コマンドps `grep 共有ライブラリの名前 /proc/...
自分用メモとして残しておきます。
以前にOpenSSLの脆弱性として有名になったHeartbleedがありましたが、その際にOpenSSLのライブラリが掴んでいるプロセスを特定する際に、使用したコマンドのメモを残しておきます。
これを使うことで、掴んでいるプロセスを特定し、場合によってはサービスの再起動などの対応が出来ると思います。
といってもbashのワンライナーで実現できました。
手順
ps `grep 共有ライブラリの名前 /proc/*/maps | cut -d / -f 3`
例えば自分の環境において、OpenSSLの共有ライブラリのlibssl.so
が掴んでいるプロセスの場合は以下のようになります。
# ps `grep libssl.so /proc/*/maps | cut -d / -f 3`
PID TTY STAT TIME COMMAND
2097 ? Ss 0:00 nginx: master process /usr/sbin/nginx
2098 ? S 0:00 nginx: worker process
2099 ? S 0:03 nginx: worker process
2100 ? S 0:03 nginx: worker process
2101 ? S 0:03 nginx: worker process
2180 ? Ss 0:06 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervis
2236 ? S 0:04 python /var/www/webvirtmgr/console/webvirtmgr-novnc
2252 ? S 0:08 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2349 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2350 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2351 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2352 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2353 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2356 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2357 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2361 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2362 ? S 0:00 /usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /v
2508 ? Sl 94:53 qemu-system-x86_64 -enable-kvm -name centos6_proxy2 -S -machine
2540 ? Sl 61:28 qemu-system-x86_64 -enable-kvm -name centos6_zabbix -S -machine
2570 ? Sl 7:10 qemu-system-x86_64 -enable-kvm -name centos6_dns2 -S -machine pc
nginxやpython、qemuなどが掴んでいるプロセスとなります。
例えばnginxの場合、何がロードされているかは以下のようになります。
# cat /proc/2097/maps
00400000-004cc000 r-xp 00000000 fc:00 14027922 /usr/sbin/nginx
006cb000-006cc000 r--p 000cb000 fc:00 14027922 /usr/sbin/nginx
006cc000-006e1000 rw-p 000cc000 fc:00 14027922 /usr/sbin/nginx
006e1000-006f0000 rw-p 00000000 00:00 0
0161f000-01712000 rw-p 00000000 00:00 0 [heap]
7f648cf8a000-7f648cf95000 r-xp 00000000 fc:00 12976373 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f648cf95000-7f648d194000 ---p 0000b000 fc:00 12976373 /lib/x86_64-linux-gnu/libnss_files-2.19.so
7f648d194000-7f648d195000 r--p 0000a000 fc:00 12976373 /lib/x86_64-linux-gnu/libnss_files-2.19.so
後略
この中からOpenSSLに関連するライブラリ(libssl.so
やlibcrypto.so
)を探して検索してやることで、該当プロセスを見つけることが出来ます。