[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:11503] Re: jfbterm
佐野@浜松です。
In <20000120152315T.hattas@xxxxxxxxxxxxxxxxxxxxxx>,
at Thu, 20 Jan 2000 15:23:30 +0900,
on [debian-devel:11425] Re: jfbterm,
Hatta Shuzo <hattas@xxxxxxxxxxxxxxxxxxxxxx> さん writes:
hattas> > ・jfbterm が exit で凍る問題
これなんですが、いろいろ試してみた結果、 vtermlow.c の
void tvterm_unregister_signal(void) の中にある
ioctl(0, VT_SETMODE, &vtm);
が原因らしい、ということがわかりました。
こいつの前で exit(-1) してしまうか、あるいはこの行をコメントアウトして
しまえば、凍らなくなります。ただし自動的に元のモードに戻らないので、
手動で仮想端末を切り換えて元に戻す必要はありますが。
あるいは、jfbterm を実行してから、他の端末に移って、kill -TERM で
止めてしまっても同様な結果になります。
# 場合によっては jfbterm を実行した shell のほうも kill -TERM で
# 止めないと shell が落ちないことがあるみたい。exec jfbterm で
# 起動していれば、確実に shell まで落ちて init で再起動されるけれど。
なお、b-f の floppy から起動していない普通のシステムでも
void tvterm_unregister_signal(void) の
ioctl(sig_obj->term->ttyfd, TIOCSWINSZ, sig_obj->win);
ioctl(0, TIOCCONS, NULL);
は失敗しているようです。
/*
if (ioctl(0, VT_SETMODE, &vtm)) {
fprintf(stderr,"1st ioctl failed\r\n");
fflush(stderr);
exit(-1);
}
*/
if (ioctl(sig_obj->term->ttyfd, TIOCSWINSZ, sig_obj->win)) {
fprintf(stderr,"ioctl(TIOCWINSZ) failed\r\n");
fflush(stderr);
exit(1);
}
if (ioctl(0, TIOCCONS, NULL)) {
fprintf(stderr,"ioctl(TIOCCONS) failed\r\n");
fflush(stderr);
exit(-1);
}
とかして、exit(1) をコメントにしたり有効にしたりしてみると、
そのへんが確認できると思います。
何故 boot-floppies の環境だと
ioctl(0, VT_SETMODE, &vtm);
が成功しないで凍りつくのか、その原因については、まだわかりません。
以上、現状報告でした。
--
# (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
<kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)