pidofコマンド

メモ程度に
今日、職場でchef職人(私はまだchef全然触ってないです。電子書籍も買ったのにもったいない…)との会話の中で

chef「いやぁ、/etc/rc.d/init.d/hoge statusの結果を見てセットアップするかしないかを判断してるみたいなんですが、うまくいかないんですよねぇ」
私 「status自体は/etc/rc.d/init.d/functionsの中で定義されてるんで、それをsourceで取り込んで……ないですねぇ。
   この場合、戻り値は127になる……、あれ、コイツexit 0で抜けてやがりますねぇ」
chef「ひゃー」

なんて会話をして、もう面倒くさいから/etc/rc.d/init.d/hogeをいじっている中で見つけたのが冒頭のpidofコマンド。
どうやらプロセス名を指定するとそのプロセスIDを返してくれる模様。ただしプロセス名は完全一致。
というか、フルパス実行していた時のbasenameと一致すればいいみたい。


例:

$ ps -ef |grep http[d]
httpd    10161 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10162 26827  0 Aug31 ?        00:00:02 /usr/local/apache2/bin/httpd
httpd    10163 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10164 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10165 26827  0 Aug31 ?        00:00:00 /usr/local/apache2/bin/httpd
httpd    10166 26827  0 Aug31 ?        00:00:02 /usr/local/apache2/bin/httpd
httpd    10167 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10168 26827  0 Aug31 ?        00:00:00 /usr/local/apache2/bin/httpd
httpd    10169 26827  0 Aug31 ?        00:00:00 /usr/local/apache2/bin/httpd
httpd    10170 26827  0 Aug31 ?        00:00:08 /usr/local/apache2/bin/httpd
httpd    10171 26827  0 Aug31 ?        00:00:02 /usr/local/apache2/bin/httpd
httpd    10172 26827  0 Aug31 ?        00:00:05 /usr/local/apache2/bin/httpd
httpd    10173 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10174 26827  0 Aug31 ?        00:00:03 /usr/local/apache2/bin/httpd
httpd    10175 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10176 26827  0 Aug31 ?        00:00:03 /usr/local/apache2/bin/httpd
httpd    10177 26827  0 Aug31 ?        00:00:06 /usr/local/apache2/bin/httpd
httpd    10178 26827  0 Aug31 ?        00:00:00 /usr/local/apache2/bin/httpd
httpd    10179 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
httpd    10180 26827  0 Aug31 ?        00:00:01 /usr/local/apache2/bin/httpd
root     26827     1  0 May04 ?        00:11:21 /usr/local/apache2/bin/httpd
$ pidof http
$ pidof httpd
26827 10180 10179 10178 10177 10176 10175 10174 10173 10172 10171 10170 10169 10168 10167 10166 10165 10164 10163 10162 10161


参考:

$ basename /usr/local/apache2/bin/httpd
httpd

ね? httpでは何も返さず、httpdを指定するとプロセスIDを返すという。
プロセス制御のスクリプトを書くときに重宝しそう。


ちなみにこの記事を書く際、確認に某レンタルVPSでwhich statusしたら、/sbin/status成るものが返ってきた。

$ whatis status
status: nothing appropriate

コヤツは何者……?