リモート マシンで長い Linux プログラムを実行していて、それを停止したいのですが、問題は、kill コマンドを使用すると、プログラムが結果を保存せずに終了することです。通常、プログラムを終了するにはCtrl+Cを使用します。その場合、プログラムは結果を保存しますが、現在はセッションを実行しているマシンにいないため、Ctrl+を押すことはできませんC。
Ctrl私の質問は次のとおりです: +に相当するリモートの方法はありCますか?
リモート マシンで長い Linux プログラムを実行していて、それを停止したいのですが、問題は、kill コマンドを使用すると、プログラムが結果を保存せずに終了することです。通常、プログラムを終了するにはCtrl+Cを使用します。その場合、プログラムは結果を保存しますが、現在はセッションを実行しているマシンにいないため、Ctrl+を押すことはできませんC。
Ctrl私の質問は次のとおりです: +に相当するリモートの方法はありCますか?
試す:
kill -SIGINT processPIDHere
デフォルトでは、送信するシグナルを指定しない限り、kill は (終了) シグナルを送信しますが、基本的Ctrl CにはSIGINT
(割り込み) シグナルを送信します。SIGTERM
ctrl c は SIGINT シグナルを送信するだけですが、他にももう少しソフトなシグナルがいくつかあります。http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html
kill コマンドを使用して、他のシグナルを送信できると思います。(詳細は man kill を参照)
長時間実行されるリモート プロセスを制御する場合は、SIGTERM のシグナル ハンドラーをインストールして (man signal
およびman sigaction
このトピックに関する多くの SO の質問を参照)、死ぬ前に適切にクリーンアップすることができます。
これは非常に一般的なことです。
シグナル ハンドラーでも、プログラムの残りの部分を破壊することなく、シグナル ハンドラーで実行できることが非常に制限されているという点で、割り込みハンドラーのようなものであることに注意してください。ここでできる最善のことは、atomic_t "should_quit" 変数を設定することです。