ネットワークパイプを介して実行されているプロセスと端末の対話を実行する方法は?

ネットワークパイプを介して実行されているプロセスと端末の対話を実行する方法は?

STDIOがリモートで接続できるように、端末で実行したいプログラムをどのように実行しますか?

具体的には、1つのホストでgdbを起動し、そのターミナルインターフェースにリモートで接続し、CTRL + Cを使用して実行を一時停止し、レイアウト(たとえばlayout regs)を変更できるようにします。下の画像は、私が達成したいことを示しています。

GDBクライアントへのリモート接続

これまでに私が得た最も近い方法は、次のようにsocatptyを作成し、リモートホストでgdbを起動することです。

$ socat PTY,link=$HOME/somedev,rawer, SYSTEM:"gdb 2>&1",pty

その後、このPTYはnetcatリスナーとパイプに接続されます。

$ cat ~/somedev | nc -l 5556 > ~/somedev

ワークステーションでnetcatを起動します。

$ nc <remote_host> 5556

私が今持っているのは私が望むものと似ていますが、ターミナルインタラクションは少し不安定です(例えば、gdbのレイアウトを変更すると最初は大丈夫に見えますが、新しい行がウィンドウの整列を乱すように見えます)。 CTRL + Cは、プロセスを中断するためにgdbプロセスに渡されません。

私はこの動作のいくつかがnetcatの制限によるものかもしれないことを認めています。リモートホストのtcpリスナーに接続している他のプログラムで開いています。

ソリューションの他の制限事項:

  • gdbプロセスは確立されたリモート接続から独立して起動する必要があります(つまり、図に示すようにsocatを使用してgdbプロセスを開始することはできませんsocat TCP-LISTEN:5556,reuseaddr,fork EXEC:"gdb")。これにより、リモートホストではなくワークステーションでgdbを実行することに関連するソリューションも削除されます。
  • ワークステーション端末にCtrl + Cを入力すると、SIGINTgdbプロセスに転送する必要があります。

ベストアンサー1

リモートホストに接続するための標準ソリューションは次のとおりです。SSHあなたの質問には、これらの可能性を排除するものはありません。端末転送はSSHに組み込まれている機能です。

gdbプロセスは、リモート接続設定とは別に開始する必要があります。

これを行うには画面またはマルチプレクサ会議。次に、SSHを使用してセッションに接続します。


Netcatはデータのみを渡します。端末のインターフェースは、端末を介して交換されるデータ以上で構成される。処理も必要です。I/W制御そうしないと、アプリケーションが端末サイズを照会できるようになり、入力変換(Ctrl+CSIGINT信号に変換など)などの特定の機能が機能しなくなります。ソキャットはできます。あなたが間違っていない場合は、SSHを使用する方がはるかに簡単になります。

おすすめ記事