以前に一度も経験していなかった奇妙な問題があります。これが私がしたことです:
私はアプリを起動しました./myApp
。
&
バックグラウンドで実行するコマンドライン引数はありません。
残念ながら、私のシステムはある時点で停止しました。 GUIを介したアクセスがないため、まずCPUを多用する作業をすべて中断することにしました。だから一つtty
(Shortcut Ctrl++ on Ubuntu)を思い出し、Alt権限を得て実行しました。F2kill -STOP pid
pid
myApp
top
幸いなことに、少し時間が経つとシステムが解凍されました。だからプロセスを再開しましたkill -CONT pid
。
しかし、端末で見た内容は次のとおりです。
[2]+ Stopped ./myApp
ターミナルはアプリケーションが実行されていない状態にあります(たとえば、私ができることや必要なls
すべてのタスク)、プロセスマネージャはまだアプリケーションが実行中であると報告します。これを行うと、34時間のコンピューティング時間が無駄になることを嬉しく思います(はい、それは本当に悪いアプリケーションです。アーカイブする出力がまったくないからです。
アプリケーションの重い操作が完了したら(数時間以内に予想される)、アプリケーション内に特定のタスクを入力してファイルに書き込むことができるようにする必要があります(入力用のカスタムシェルプロンプトに似ているため、これはそうです)。cin
)を使用しています。
したがって、質問は次のようになります。出力を確認して対話できるようにアプリケーションに戻るにはどうすればよいですか?可能でない場合:アプリケーションを再起動せずにアプリケーションにストリーミングし、必要なコマンドを実行できますか?
修正するアプリケーションはまだまったく同じ端末に出力されます。
参考までにこれが必要な場合があります:私はカーネル3.2.0-36でUbuntu x86を実行しています。
答え1
接続されたpsuedo-ttyがないプロセスにコンソールを再接続することは不可能だと思います。
後でコンソールへの接続を維持する必要がある場合は、を使用してみてくださいscreen
。
Screen は、シェルの特定のインスタンスとローカル端末との間のやり取りのために設計されたツールです。ブローカーになると、実行中のプロセスから切り離して後で再接続できます。これは、インターネット接続が不安定な場合、システム管理にSSHを使用している場合、または長期間実行されるプロセスがある場合に便利です。
端末(GUIまたは実際のttyのいずれか)を開くときscreen
。 Ubuntuではデフォルトでインストールする必要があります。画面には、デフォルトのシェルが実行中であることを知らせ、ヘルプを見つける方法が表示されます。その後、ログインシェルを実行し、そのまま残ります。
最も基本的な使用法では、Ctrl-A
その後を使用してD
現在のセッションから切り離すことができます。セッションに再接続するには、次を使用しますscreen -r <complete name of session>
。セッション名を覚えていない場合、-ls
コマンドスイッチは利用可能なセッションの詳細を提供します。
Screenでできることはあまりにも多く、使用する機会はあまりありませんでしたが、数年前、Digiumサポートチームは、リバースSSH接続とマルチユーザー画面を使用してエミュレートされたPOTSインターフェースカードの1つを構成するのに役立ちました。方法。これにより、パスワードを知らなくてもAsteriskサーバーに安全にアクセスでき、実行中の作業を監査できます。