サーバー上でコマンドを実行しています。このライブラリが付属していますhttp://www.graphicsmagick.org/。
基本的に、多数のファイルに対してイメージ処理を実行する for ループがあります。
コマンドは数時間実行され、数時間実行されます。SSH を終了しても、リモート マシンでこれらのコマンドを実行し続けることはできますか? SSH を終了すると、現在のコマンドの実行を終了するための何らかの信号が送信されますか?
他に気づいたこと...リモートでコマンドを実行しているのに、ラップトップが過熱しています。アクティビティモニターには、bash が CPU の 70% を使用していることが示されています。私は MacBook Pro を使用しています。
これは奇妙です。リモート コマンドがローカル マシンに負担をかけるのはなぜでしょうか?
答え1
1 つの解決策は、コマンドの前に を付けることですnohup
。これにより、コンピューターは「ハングアップ」信号 (ssh セッションの終了など) を無視します。これはループでは機能しない可能性がありますfor
。
もう 1 つの良い解決策 (そして個人的には最も気に入っている方法) は、「screen」パッケージをインストールすることです。 は、screen
を押すことでプロセスを実行したまま切断できる仮想端末を提供しますCTRL + A , D
。 その後、 で screen に再接続できますscreen -r
。
答え2
bash
制御端末 (この場合は )が関連付けられているセッション リーダーが終了すると、オペレーティング システムはフォアグラウンド プロセス グループ (フォアグラウンド ジョブ) 内のすべてのプロセスに SIGHUP を送信します。さらに、bash
はデフォルトで、実行中または停止中のすべてのジョブに SIGHUP を送信します (停止中のジョブにも SIGCONT が送信されます)。これで、SIGHUP を受信したときのデフォルトのアクションは、プロセスの終了になります。
プロセスがbash
終了した後も実行し続けるには、いくつかの方法があります。まず、プロセスを SIGHUP の影響を受けないようにすることができます。これは、nohup
コマンドが行うことです。次に、対応するプロセス グループをバックグラウンドに置き、bash
SIGHUP を送信しないように指示することができます。これは、シェル組み込みコマンドが使用される目的です (対話型ログイン シェルが終了したときにすべてのジョブに SIGHUP を送信するシェル オプションがdisown
あることにも注意してください)。huponexit
再度ログインした後に、プロセス グループに端末を再接続する場合は、これが可能なラッパーを使用することをお勧めします。 などの端末マルチプレクサにはscreen
この機能があります。