ssh を終了してもコマンドはまだ実行されていますか?

ssh を終了してもコマンドはまだ実行されていますか?

サーバー上でコマンドを実行しています。このライブラリが付属しています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コマンドが行うことです。次に、対応するプロセス グループをバックグラウンドに置き、bashSIGHUP を送信しないように指示することができます。これは、シェル組み込みコマンドが使用される目的です (対話型ログイン シェルが終了したときにすべてのジョブに SIGHUP を送信するシェル オプションがdisownあることにも注意してください)。huponexit

再度ログインした後に、プロセス グループに端末を再接続する場合は、これが可能なラッパーを使用することをお勧めします。 などの端末マルチプレクサにはscreenこの機能があります。

関連情報