2009-06-16 7 views
2

ファイルをscpすると、^ Zで停止してバックグラウンドに置くことができます。それがバックグラウンドになると、進行状況の印刷は中止されますが、コピーは続行されます。前景を再度フォアグラウンドにすると、印刷が再開されます。それはどのように知っていますか? SIGTTOU?それは標準的なpttyで起こりますか?プロセスはバックグラウンドの状態をどのように知っていますか?

+0

これはあなたのシェルの機能ですか? – Cogsy

+0

私はないと思っています。私はbin/bash(シェルのエキサイティングではない)を使い、shとkshは同じ動作をします。 – jdizzle

答えて

1

私の同僚と私は実際にソースを見て答えを見つけました。

scpが出力を印刷しようとするたびに、stdoutにtcgetpgrpが実行されます。これは、端末の制御プロセスグループを返します(端末であると仮定します)。ターミナルを制御するプロセスグループがscpのプロセスグループと同じ場合にのみ表示されます。シグナリングは必要ありません。 (プログレスラインのサイズを計算するにはSIGWINCHを処理しますが)。

2

はい、あなたはそれを持っています。このプロセスは、SIGTTOU(そしてそれが何をしているかに応じてSIGTTIN)をトラップまたは無視し、それらのシグナルを受け取ったときに適切に動作します。 Linuxは実際には通常の擬似端末でこれらの信号を送信します。

+0

しかし、私のttyは-tostopを持っていますので、通常のprocsは端末に書き込むときに一時停止しません。背景のprocがttyのライン規律を変更しようとしたときに生成されますか? – jdizzle

+0

通常の* backgrounded * procsが端末に書き込むときは、私は言うべきです。 – jdizzle

関連する問題