2007年11月23日金曜日

PulseAudioがクラッシュしたときの復帰法

Fedora8で採用されたPulseAudioですが、まだまだ不安定です^^; しょっちゅう堕ちます。
で、プロセスごと堕ちてくれたら
$ pulseaudio -D
でデーモンを再度起動すれば済む訳なんですが、たまにデバイスの扱いに失敗するのか、デーモンは起動しているけれどデバイスを認識できない状況に陥ります。
状況として、
・いきなり音が鳴らなくなった
・PulseAudioManager(pam)でステータスを確認すると、サーバには接続しているが各情報がすべて n/a
となっていたら、プロセスが起動したままクラッシュしています。この場合、
$ pulseaudio -k
としてもデーモンプロセスが死にません。
解決法は、/tmp/pulse-`whoami`/pidファイルに書かれているプロセス番号のプロセスを強制KILLです。具体的には、
$ kill -KILL 1234
です。1234は上記のファイル内の数字に置き換えてください。うまくプロセスを殺せたら、
$ pulseaudio -D
でデーモンを起動させて復帰です。
しかし、まさかpsコマンドで見えるプロセス名が「exe」とは思いませんでした。以前から
「なんでwineも動かしてないのにexeなんてプロセスが走ってるんだろう・・・?」
と疑問には思っていたんですよね。で、試しに
$ ps auwx | grep 18936 #18936はexeのプロセス番号
で確認したところ、

tako 18936 8.9 0.7 220972 5828 ? Ssl 13:37 3:40 pulseaudio -D

ってなってました。なんで「exe」なんて表記にしてんだろ・・・?
今でも時々PulseAudioがおかしくなりますが、だいぶ扱いが分かってきた気がします。以前にもこれと同じ状況に陥り、その時はどれがpulseaudioのプロセスか分からなかったので再ログインしたんですよねぇ。これでだいぶ対処がマシになりました。
以前より遅延も見られなくなったし、もうちょっとってところかな。プロセスがずっとデバイスを握りつづけてたら安定してるんだけど、デバイスを解放したり確保したり〜と頻繁に繰り返すとついていけなくなるって感じですね。
特に、aRtsとの相性がよろしくない。akodeplayが引数なしでpulseaudioを利用してくれるんならそれで片付くんだけどなぁ。aRtsは時代遅れだから使いたくないよ^^;
でもアップグレード直後に比べたらはるかに安定してるので、このまま使いつづけてみますかね。プロセスごとのボリューム調整は結構面白いし。記憶してくれないのが難点だけど。記憶させる方法もありそうだけどなぁ。
ま、ぼちぼち調べていきますか。Fedora8はまだ情報が少ないし。けど私のBlogはあんまり検索上位には入っていかないんだよなぁ。未だにエキブロのBlogの方が上位だし^^;
もちっと有用な情報出していかないと上位は難しい!?