GNU/Linux >> Linux の 問題 >  >> Linux

ログアウト後も Linux プロセスを実行し続ける

解決策 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 での検索はほぼ無限に簡単です。


Linux
  1. Linuxで実行中のプロセスを再起動(またはリセット)する方法は?

  2. バックグラウンドでの Linux プロセス - ジョブで停止しましたか?

  3. Linux コンソールで、出力をラップしない方法

  1. GNUScreenを使用するためのLinuxのヒント

  2. Linux –それは制御端末を持っているプロセスですか、それとも制御端末を持っているセッションですか?

  3. Linuxでバックグラウンドで実行されているプロセスが強制終了されました

  1. Linuxの特定のポートで実行されているプロセスを強制終了する方法は?

  2. Linuxでスクリーンプロセスを停止するには?

  3. Linux の特定のポートで実行されているプロセスを強制終了するには?