解決策 1:
最良の方法は、端末マルチプレクサでプロセスを開始することです。または、プロセスが HUP シグナルを受信しないようにすることもできます。
端末マルチプレクサーは、「実際の」端末から独立して動作する「仮想」端末を提供します (実際、今日のすべての端末は「仮想」ですが、それは別の日の別のトピックです)。 ssh セッションで実際の端末が閉じられても、仮想端末は実行され続けます。
仮想端末から開始されたすべてのプロセスは、その仮想端末で引き続き実行されます。サーバーに再接続すると、仮想端末に再接続でき、経過した時間以外は何も起こらなかったかのようになります。
2 つの一般的なターミナル マルチプレクサは、screen と tmux です。
画面の学習曲線は急勾配です。概念を説明する図付きの優れたチュートリアルがあります:http://www.ibm.com/developerworks/aix/library/au-gnu_screen/
HUP シグナル (または SIGHUP) は、ターミナルが閉じられたときに、ターミナルからすべての子プロセスに送信されます。 SIGHUP を受け取ったときの一般的なアクションは、終了することです。したがって、ssh セッションが切断されると、すべてのプロセスが終了します。これを避けるために、プロセスが SIGHUP を受信しないようにすることができます。
そのための 2 つの簡単な方法は nohup
です。 と disown
.
nohup
の詳細については、 そして disown
作品はこの質問と回答を読んでください: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and
注:プロセスは引き続き実行されますが、プロセスは端末に接続されていないため、対話することはできなくなります。このメソッドは主に、一度開始するとユーザー入力を必要としない長時間実行されるバッチ プロセスに役立ちます。
解決策 2:
これを行うにはいくつかの方法がありますが、私が最も便利だと思うのは GNU Screen を使用することです.
SSH でログインしたら、screen
を実行します。 .これにより、画面内で実行されている別のシェルが開始されます。コマンドを実行してから Ctrl を実行します -a d .
これにより、画面セッションから「切断」されます。この時点で、ログアウトするか、その他の操作を行うことができます。
screen セッションに再接続したい場合は、 screen -RD
を実行するだけです シェル プロンプトから (セッションを作成したのと同じユーザーとして)。
解決策 3:
bash
で 、disown
キーワードはこれに最適です。まず、プロセスをバックグラウンドで実行します (&
を使用します)。 、または ^Z
次に bg
と入力します ):
$ wget --quiet http://server/some_big_file.zip &
[1] 1156
jobs
と入力する プロセスがまだシェルによって所有されていることがわかります:
$ jobs
[1]+ Running wget
この時点でログアウトすると、バックグラウンド タスクも強制終了されます。ただし、disown
を実行すると 、bash はジョブをデタッチし、実行を継続できるようにします:
$ disown
これを確認できます:
$ jobs
$ logout
&
を組み合わせることもできます と disown
同じ行に、次のように:
$ wget --quiet http://server/some_big_file.zip & disown
$ logout
これは nohup
を実行するよりも優れています nohup.out
を残さないので、私の意見では ファイルシステム全体にファイルが散らばっています。また、nohup
コマンドを実行する前に実行する必要があります — disown
バックグラウンドでタスクを分離することを後で決定した場合にのみ使用できます。
解決策 4:
ほとんどの Linux ボックスで利用可能なツール nohup がこれを行います。
解決策 5:
徹底的にするために、screen と同じ基本的な考え方を持つ tmux を指摘します:
<ブロック引用>tmux は、GNU screen などのプログラムに代わる最新の BSD ライセンスの代替となることを目的としています。主な機能は次のとおりです:
- 強力で一貫性があり、十分に文書化されており、簡単にスクリプト化できるコマンド インターフェース
- ウィンドウは、水平方向と垂直方向にペインに分割できます。
- ペインは自由に移動およびサイズ変更したり、プリセット レイアウトに配置したりできます。
- UTF-8 および 256 色の端末のサポート
- 複数のバッファをコピーして貼り付けます。
- ウィンドウ、セッション、またはクライアントを選択するためのインタラクティブなメニュー
- ターゲット内のテキストを検索して、現在のウィンドウを変更します。
- 手動またはタイムアウト後の端末ロック
- 開発が活発に行われている、クリーンで簡単に拡張できる BSD ライセンスのコードベース。
ただし、Google での検索はほぼ無限に簡単です。