標準出力の独占権を取得する方法

標準出力の独占権を取得する方法

これは簡単な質問ですが、関連するものが見つかりません。

プログラムは、現在の仮想端末から標準出力の独占権をどのように取得しますか?

つまり、2つのジョブを実行すると、1つのジョブのみを標準出力に書き込むことができます。 (フルスクリーンncursesインストーラと同じです)。

ありがとうございます。

答え1

このstty tostop設定を有効にすると、カーネルは端末SIGTTOUに書き込みを試みるバックグラウンドプロセスに送信されます。ただし、プロセスはシグナルを無視できます。

別のアプローチは、アプリケーションを未使用の仮想コンソールに接続することです。これを行うには、新しいユーザーを作成し、そのユーザーだけが端末にアクセスできるようにし、そのユーザーとしてプログラムを実行します。

編集する

これははるかに簡単です。 (実際には)他のユーザーは必要ありません。現在使用していない端末だけで済みます。通常、同じユーザーの他のプロセスはその端末を使用しませんが、これを行うと、ルートプロセスを除くすべてのプロセスがそこに書き込まれるのを防ぎますchmod 000 /dev/tty。ファイル記述子はすでに開いていてサブプロセスから継承されているため、実行中のシェルと将来のサブプロセスに問題はありません。

理論的には、同じユーザーのプロセスは権限を復元できますが、そうしません。

関連情報