2007/11/02

scimのdefunct解決方法がわかった

ずいぶん前から気にはなっていたのだが scim がdefunctになるのである。

user@user-laptop:~$ ps -ef |grep defu
user 17876 17840 0 Oct30 ? 00:00:00 [scim]

ちなみに親プロセスはx-session-manager

user@user-laptop:~$ ps -ef |grep 17840
user 17840 3824 0 Oct30 ? 00:00:00 x-session-manager

Ubuntu 6.10なのだが、ネットで調べてもはっきりした答えがないので、調べてみることにした。

どうも 以下の流れで実行されているようである。

/etc/X11/Xsession
/etc/X11/Xsession.d/90im-switch
/etc/X11/xinit/xinput.d/scim ← XIM変数にscimを設定しているだけ

うーん、ようく見てみると

FileName /etc/X11/Xsession.d/90im-switch
: :
# execute XIM_PROGRAM
[ -n "$XIM_PROGRAM" -a -x "$XIM_PROGRAM" ] && eval "$XIM_PROGRAM $XIM_ARGS &" || true

どうもこの行でscimを起動しているようである。

えーーと XIM_PROGRAM .... & ←おおお &で起動しているではないか!!

でもって /etc/X11/xinit/xinput.d/scim ではXIM_ARGS="--daemon" をセットしているので、自分でデーモンになってしまう。

ということは、最初に起動されたscimプロセスがぬけがらでdefunctになるんだねぇ。

じゃあということで /etc/X11/xinit/xinput.d/scim を以下の様に修正した。

#XIM_ARGS="--daemon"
XIM_ARGS=""

早速ログアウトしてログインしてみたが、defunctなくなっていました。めでたしめでたし。

でもdefunctでもちゃんと動くだろって??

メモリ上(スワップされてしまうが)に残ってしまうので、ケチな僕としては許せないんだねぇ。

それでは。