web-dev-qa-db-ja.com

プログラムをキャンセルするコマンドのctrl cと同等

長いLinuxプログラムをリモートマシンで実行していて、それを停止したいのですが、killコマンドを使用すると、結果を保存せずにプログラムが終了するという問題があります。通常、プログラムを終了するために行うことはctrl cを使用することです。その場合、プログラムは結果を保存しますが、現在はセッションを実行しているマシンにいないため、ctrl cを実行できません。

私の質問は次のとおりです。ctrlcに相当する方法をリモートで実行する方法はありますか。

66
Eduardo

試してください:

kill -SIGINT processPIDHere

基本的に Ctrl C 送信するシグナルを指定しない限り、killはデフォルトでSIGINT(終了)シグナルを送信しますが、SIGTERM(割り込み)シグナルを送信します。

97
Firas Assaad

ctrl cはSIGINTシグナルを送信するだけですが、もう少しソフトなシグナルがいくつかあります。 http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html

Killコマンドを使用して他の信号を送信できると思います。 (詳細はman killをご覧ください)

7
Johan

長時間実行されるリモートプロセスを制御する場合、SIGTERMのシグナルハンドラをインストールできます(man signalおよびman sigactionおよび多くのSOの質問)、死ぬ前にきれいにクリーンアップするために。

それは非常に一般的なことです。

4
dmckee

Mongodの例を次に示します

コマンドラインからデーモンを起動するには:

mongod &

じゃあ後で

kill -SIGINT `pgrep mongod`
2
Michael Cole

シグナルハンドラーにも注意してください。これは、プログラムの残りの部分を破損することなく、その中で実行できることをveryに制限しているという点で、割り込みハンドラーのようなものです。ここでできる最善のことは、atomic_t "should_quit"変数を設定することです。

0
Ana Betts

私は以下のようにやっています

killall -2 <ProgramName>

または

kill -2 <PID of your process>

私は信号の名前を忘れていました。つまり、ここではSIGINT/SIGKILLなので、killall -2またはkillall -9のような番号を使用しています

0
Jeegar Patel