プロセスごとのlimitを表示するスクリプトを書いた

プロセスごとのlimitを表示するのにイチイチpidを調べてcatしてなんて面倒なので、ビシッと表示してしまう簡易的なスクリプトを書いてみた。※エラー処理とかその他諸々特に気をつかってないのでゆるして。

/usr/local/bin/にpslimitとでもして下記のスクリプトを保存、でchmod 755 pslimitもしておく。てか、どこでもすきなところにどうぞ。

#!/bin/bash
#
# http://d.hatena.ne.jp/poch-7003/
# #poch7003
#

[ -f /proc/$$/limits ] || exit 99

BAR="-----------------------------------------------------------------------------"
ps=`ps -eo user,pid,args |tr -s ' '`

if [ $# = 1 ]; then
        case "$1" in
                [0-9]*) 
                        ps=`echo "$ps" |grep " $1 " |grep -v " $$ "`
                ;;

                [!\-][0-9A-Za-z\-_]*)
                        ps=`echo "$ps" |grep "^$1 " |grep -v " $$ "`
                ;;

                *)
                        echo "usage: $0 [-h] [pid|user]"
                        exit 1
                ;;
        esac
fi

echo "$ps" | while read user pid args; do
        if [ -f /proc/$pid/limits ]; then
                echo "$BAR"
                echo "pid => $pid"
                echo "user => $user"
                echo "cmd => $args"
                echo "$BAR"
                cat /proc/$pid/limits
                echo ""
        fi
done

exit $?

※下記はパスが通ってる事前提での実行例。

# pslimit -h
usage: /usr/local/bin/pslimit [-h] [pid|user]

# pslimit named
-----------------------------------------------------------------------------
pid => xxxx
user => named
cmd => /usr/sbin/named -u named -t /var/named/chroot
-----------------------------------------------------------------------------
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            unlimited            unlimited            bytes     
Max core file size        unlimited            unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             8191                 8191                 processes 
Max open files            4096                 4096                 files     
Max locked memory         32768                32768                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       8191                 8191                 signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    

/etc/security/limits.d/で設定したのに再起動したらapacheにlimitが反映されてない!なんてのを自分で気づく為にどうぞ。