1) すでに実行中の他のプロセスの入出力のための端末を開きたいです。新しい端末を開くと、bashは自動的に実行されますが、すでにbashが占有しているため、端末のstdinを取得できません。リンクされた実行ファイルなしでターミナルウィンドウを実行したいです。
2)SSH経由で接続している場合、新しい接続でも同じ動作を得るにはどうすればよいですか?つまり、bashが実行されていないリモート端末はありますか?
Ubuntuを実行してください。
答え1
何もしないプログラムで端末を開きます。ほとんどの端末エミュレータは、起動時に端末アプリケーション側に接続されたプログラムを実行し、そのプログラムが終了したときに端末を閉じることを除いて、実際には端末でプログラムを実行する必要はありません。
標準のUnixツールバーには、信号が終了するまで何もしないコマンドはありませんが、sleep 999999999
十分に近いです。
xterm -e sleep 999999999
ssh -tt host.example.com sleep 999999999
どこかにエンドデバイスを報告することもできます。
tty=$(xterm -e sh -c 'tty >&3; exec sleep 999999999' 3>&1)
答え2
端末に関連付けられていないほとんどのプロセスには、ファイルシステム内の他の場所または/dev/nullを指すstdin/stdout/stderrがあります。
何を追っているのか分かりません。
デバッガを使用して他のプロセスに接続できます。ルートでなければなりません。
次のコマンドを実行して、指す場所を確認できます。
find /proc -name 0 -o -name 1 -o -name 2 | xargs ls -ld
持っているプログラムに再接続してその出力を表示するには、最初にという素晴らしいプログラムからそのプログラムを起動できます。screen
このプログラムは複数の端末ウィンドウを起動し、プログラムを実行できるセッションを開始します。その後、接続が切断されたら、後で再接続してください。