[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00472] Re: 疑似端末有効かつ ANSICOLOR=2 で、バックグラウンドプロセスを起動すると



 しらいです。

In Message-Id <060319195834.M0108616@mix.syd.odn.ne.jp>
        hma@syd.odn.ne.jpさんwrites:
> 濱崎です。

> 疑似端末有効かつ ANSICOLOR=2 で、バックグラウンドプロセスを起動すると
> 背景色が黒ではなく白になります。

 疑似端末使用時の背景色指定が間違っていたようです。patch を
末尾に付けておきます。


> [FDclone-users:00460] よりも前からです。

 出来れば報告は一度にお願いします。各報告を別 mail にするの
は構わないんですが、その時点で判っているなら同時期に報告して
貰わないと、その都度対応していてはいつになっても release 出
来ません。


> .fd2rc の中で、
> PTYMODE=rxvt
> FD_ANSICOLOR=2
> を設定しています。
> PTYTERM は設定していません。

 何度も言いますが「ptymode」の値に端末名を指定しても無意味
です。


> 再現例:
> Tgif のファイル a.obj があるディレクトリを表示している状態で、
> H キー(EXECUTE_SH)
> を押して 
>  tgif a.obj & <enter>

 tgif は関係ないと思います。ls だろうが echo だろうが「&」
をつけて background で実行すると再現すると思います。
 それ以外に、実行中の子プロセスをサスペンドした場合や、画面
分割していて疑似端末メニューでウィンドウ移動した場合にも再現
します。

 疑似端末モードでは、疑似端末を使う全ての子プロセスが終了す
るまで、親プロセス側でも端末エミュレータ経由で端末出力を行な
います。
 子プロセスが端末エミュレータ経由なのに親プロセスが直接端末
出力を行なってしまうと、複数のプロセスで同時に実端末に対して
書込みを行なってしまい競合が発生し得るからです。
 今回の支障の原因はこの端末エミュレータ経由の背景色指定のミ
スだったので、全ての子プロセスが完全に終了するまではずっと症
状が現れていたと思います。


> 背景色を元に戻すには、
> H キー(EXECUTE_SH)
> を押して、コマンドラインが空の状態で <enter> を押し、
> シェルに落ちます。
> exit で戻ってくると、背景色が黒に戻ります。

 background で実行された孫プロセスが終了するまでは、子プロ
セスがその終了を看取ろうとするために生き残り続けます。
 二度目の EXECUTE_SH で背景色が戻るのは、その前に tgif を終
了させているためだと思います。二度目の EXECUTE_SH で初めて孫
プロセスを看取ることが出来たのでしょう。
 tgif 実行時に「&」の代わりに「&|」を使って disown してしま
えば、看取る必要が無くなるので子プロセスはすぐに終了する筈で
す。この時には症状は再現しないと思います。

---- Cut Here ----
diff -u ../old/FD-2.08a/backend.c ./backend.c
--- ../old/FD-2.08a/backend.c	Tue Feb  7 00:00:00 2006
+++ ./backend.c	Sun Mar 19 23:56:28 2006
@@ -1209,7 +1209,6 @@
 			}
 			else {
 				pty[MAXWINDOWS].fg = w1;
-				pty[MAXWINDOWS].bg = (short)-1;
 			}
 			break;
 		case TE_MOVECURSOR:
---- Cut Here ----

                                               しらい たかし