私はUbuntuでC ++アプリケーションを開発しており、出力を複数の端末にブロードキャストする必要があります。たとえば、C ++アプリケーションでbashコマンドを呼び出して出力を適切な端末に送信するなど、プログラムでこれを行う必要があります。また、開発された「マルチターミナル」ツール(ターミネーターや他のツールなど)をインストールすることはできません。代わりに、標準のbashコマンドを使用する必要があります。
だから:
process A -> will show its output in terminal A.
process B -> will show its output in terminal B.
process C -> will show its output in terminal C.
それから注意してください:
- 複数の端末に同時に様々な情報を放送し、特定の端末に特定の情報を放送します。
- エアクラック作業を見たことがありますか?このアプリケーションは、3つの異なる端末を同時に表示し、各端末は画面の特定のx、y座標に配置され、各端末は異なる情報を表示したことを覚えています。まあ、それは私が必要だと思います。
ナビゲーション後、次の「gnome-terminal」コマンドを見つけて、3つの端末を実行するように調整しました。
gnome-terminal --geometry=45x20+10+10; gnome-terminal --geometry=45x20+505+10; gnome-terminal --geometry=45x20+950+10
いくつかの詳細:
- 端末がgnome端末である必要はありません。 Ubuntuは基本的にxtermsを提供するシンプルなコンソールです。
- 上記のコマンド例のように、一度に3つの端末を起動する必要はありません。ただし、そのプロセスが端末にブロードキャストする必要がある場合は、端末を開いている必要があります。
- プログラムは、出力をブロードキャストする端末をどのように知ることができますか?たぶん端末のpidが使用されていますか?もしそうなら、端末pidはありますか?出力をその端末にどのようにリダイレクトしますか?
たとえば、次のように各端末のpidを取得しようとします。
gnome-terminal --geometry=45x20+10+10 &
私はpidを変数にリダイレクトする方法を探しています(まだ見つかりませんでした...)。
ベストアンサー1
Unixセッションは、開始点になる必要があるTTYによって処理されます。これらすべてのセッションで同じユーザーアカウントを使用している場合は、必要なTTYに直接出力を送信できる必要があります。
したがって、出力に使用したいさまざまなTTYを使用してプログラムを呼び出すと、そのTTYを出力用に開くことができます。私はGentooとCentosで何の問題もなく試しました。
セッションのTTYを見つけるには、次のtty
コマンドを使用します。
私が好むもう1つのオプションは、クライアント端末がサーバープロセスに接続するクライアント - サーバーアプローチを使用することです。これは、他のユーザーを処理するときのセキュリティへの影響が少ないためです。これは、3つの出力端子のそれぞれに名前付きパイプを使用するのと同じくらい簡単です。