sshを終了しましたが、コマンドはまだ実行されていますか? [コピー]

sshを終了しましたが、コマンドはまだ実行されていますか? [コピー]

サーバーでコマンドを実行しています。このライブラリに付属http://www.graphicsmagick.org/

デフォルトでは、多くのファイルで画像処理を実行するforループがあります。

コマンドは数時間実行され、今後数時間実行されます。 sshを終了し、リモートシステムでこのコマンドを実行し続けることができるかどうか疑問に思います。 SSHを終了すると、現在のコマンド実行を終了するための信号が送信されますか?

もう一つのことは、リモートでコマンドを実行中にノートブックが過熱したことです。アクティビティモニタは、bashがCPUの70%を使用していることを示しています。私はMacBook Proを使用しています

今これは奇妙です。リモートコマンドはローカルコンピュータにどのようなストレスを与えますか?

答え1

1つの解決策は、コマンドの前に追加することですnohup。これにより、コンピュータは「切断」シグナルを無視するように指示します(たとえば、SSHセッションの終了)。ループでは機能しない可能性がありますfor

もう一つの良い解決策(私が個人的に好きなソリューション)は、「screen」パッケージをインストールすることです。screenプロセスを実行し続けながら接続を切断するために押すことができる仮想端末を提供しますCTRL + A , D。再接続画面は後で使用できますscreen -r

答え2

接続された制御端末(あなたの場合)を持つセッションリーダーがシャットダウンするbashと、オペレーティングシステムはフォアグラウンドプロセスグループ(フォアグラウンドジョブ)のすべてのプロセスにSIGHUPを送信します。さらに、bashデフォルトでは、SIGHUPは実行中または停止中のすべてのジョブに送信されます(停止したジョブもSIGCONTを送信します)。 SIGHUPを受け取った後の基本的な作業は、プロセスを終了することです。

プロセスが終了した後もプロセスを実行し続ける方法はいくつかありますbash。まず、プロセスがSIGHUPの影響を受けないようにすることができます。これがこのnohupコマンドの役割です。次に、そのプロセスグループをバックグラウンドに設定し、bashSIGHUPを送信しないように指示できます。これはdisownシェル組み込みの目的です(また、huponexit対話型ログインシェルが終了したときにSIGHUPが送信されるようにするシェルオプションがあることに注意してください)。すべてのジョブに送信されます)

再ログイン後に端末をプロセスグループに再接続するには、この機能を備えたラッパーを使用できます。ターミナルマルチプレクサなどにscreenこの機能があります。

関連情報