2012年6月22日金曜日

mysqladmin pingと/etc/init.d/mysql statusの違い

mysqladminはソケットなりTCP/IPなりを使ってログインした後、
`Command Ping'ってパケットを投げてOKが返ってくればOKと判断する。
なので、Too many connectionsに巻き込まれたりソケットファイルが壊れたりすると転ける。

/etc/init.d/mysql status(MySQLのRPM版)は、pidファイルを探した後に
そのPIDに向かってkill -0を叩く。
なのでプロセスが浮いていれば、たとえクラッシュリカバリ中で実際には接続できなくてもOKが返る。

kill -0なんてあったんだね。
straceで追いかけたけど、実際には何のシグナルも受け取らずにkill側だけで処理が完結してるっぽい。

ゾンビプロセスだとどうなるんだろ。mysqldじゃなくても構わないから、ゾンビプロセスって手軽に再現できないかな。。

killのソースコード読みたくなってきた。。


【2012/09/07 12:32追記】
mysqldではないけど、<defunct>になってるゾンビプロセスを見つけたのでkill -0を叩いてみたら、
終了コード0で返ってきたよ!

あと、gdbでアタッチしてTステートにしたmysqldも普通に終了コード0を返した。

0 件のコメント :

コメントを投稿