Sender: katsu@FLAGSHIP Newsgroups: fj.os.bsd.freebsd,fj.os.bsd.netbsd,fj.unix.shells Subject: Re: sh trap wait References: <9e2890$2cm$1@sc6.osa.sharp.co.jp> <9e39lu$3h3$1@nsvn01.zaq.ne.jp> From: WATANABE Katsuhiro Date: 20 Aug 2002 13:54:25 +0900 Message-ID: Organization: An individual person. User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Lines: 83 Xref: FLAGSHIP mine:446 process が background にまわされると制御端末を持たなくなるか という件についてです。 記事 で しらい たかし さんいはく > >background process(以下 bg proc.) も 間違いなく制御端末を持って > >いるでしょう。例えば以下のようなお馴染みの徴候を挙げておきます: > >1. ps(1) で bg process を見ると、TT(制御端末)が結びついています。 > >  それは何をして「制御端末」と呼ぶかでしょう。 必ず /dev/tty が制御端末への通り道となっています。これは UNIX に 分類される OS すべてで共通です。(see [Linux][BSD][Solaris]) そして background process も /dev/tty にアクセスできます。 > ps(1) の TT の > 値は kernel の process 管理構造体の中から、その process と結 > びつけられた端末の名前を引用しているだけで、その process と > 端末の関係までは関知しません。 >  一方、TIOCGPGRP により取得出来る process は一端末につき最 > 大一個であり、それ以外の process は端末の入出力を使うことは > 出来ません。 「最大一個」が出てくるあたりに、しらいさんの混乱を感じます。 「その proces と結びつけられた端末」が、通例 control terminal, controlling terminal、制御端末と呼ばれているものです。そして、 端末からみた「TIOCGPGRP により取得できる process(group)」、 言い換えて controlling group に属してる process だけが 制御端末を持つと考えているのなら、それは誤りです。 process から見て制御端末は(存在すれば)一意に決まり /dev/tty として提供されますね。ところが逆に、ある端末 t からみれば、t を 制御端末にしている process (group) は複数ありえます(全くない こともある)。しらいさんの言う「最大一個」のわけがありません。 1対多の関係を何かの勘違いで1対1に押し込めてしまっているのでは。 私の主張を別な面から再びまとめます: process に制御端末があれば、それは /dev/tty を通じて参照できる。 この関係は、その process が(シェルにより)background に まわされたからといって変化するものではない。background の process でも制御端末(すなわち有効な /dev/tty)を持つものはある。 controlling group に属する process だけが入出力できるというのも 事実と異なります。入力については 4BSD と SVR4 以降になって確かに 制限されるようになりましたが、それ以外の process が端末に出力を することは普通にあります。(see [Job]) > それ以外の process は端末の入出力を使うことは > 出来ません。 >  元記事の文脈では、そういう制御可能な端末を持っているか否か > を言っているんだと思います。 念のため確認しておくと、制御端末(control terminal)という言葉は、 プロセスから見て「制御可能」な端末(制御の客体)のことをいって いるのではなく、プロセス群を制御する主体を指していっています。 参考文献 [Job] Job Control on BSDi and SunOS systems; http://www-acs.ucsd.edu/instructional/unix/jobctrlbsd.html; "Both foreground and background jobs can write to the controlling terminal." [Linux] /dev/tty のような端末スペシャルファイル; http://www.linux.or.jp/JF/JFdocs/Text-Terminal-HOWTO-6.html; [BSD] mount_fdesc(8) on NetBSD; http://www.tac.eu.org/cgi-bin/man-cgi?mount_fdesc+8+NetBSD-current など; [Solaris] tty(7D) on Solaris; http://docs.sun.com/?p=/doc/816-0222/6m6nmlt3g&a=view [TermiosGen] Job Control や The Controlling Terminal の説明の節; 各種 OS の termios(4); http://www.freebsd.org/cgi/man.cgi?query=termios&apropos=0&sektion=4&manpath=FreeBSD+4.6-RELEASE&format=html など; [TermiosSol] Solaris のSession Management の説明の節; http://docs.sun.com/?q=termios&p=/doc/816-0222/6m6nmlt36&a=view; "Background process groups in the controlling process's session are subject to a job control line discipline when they attempt to access their controlling terminal." [PS] ps(1) man page; -- 渡邊克宏 http://katsu.watanabe.name