指定されたIPアドレスに対してpingを送信するスクリプトファイルpingIP.shがあります。
ping -c 70 74.125.228.71
問題は、実行中のスクリプトを途中で停止しようとすると正しく停止しないことです。
Linux cmdを使用すると、ps -ef|grep pingIP |grep -v 'grep pingIP'
プロセスIDを取得してcmdを使用して終了できますkill -9 processid
。
たとえば、スクリプトファイルを実行します。
PING 74.125.228.71 (74.125.228.71) 56(84) bytes of data.
64 bytes from 74.125.228.71: icmp_seq=1 ttl=122 time=256 ms
64 bytes from 74.125.228.71: icmp_seq=2 ttl=122 time=244 ms
64 bytes from 74.125.228.71: icmp_seq=3 ttl=122 time=250 ms
64 bytes from 74.125.228.71: icmp_seq=4 ttl=122 time=254 ms
64 bytes from 74.125.228.71: icmp_seq=5 ttl=122 time=243 ms
今すぐコマンドを実行するとkill
スクリプトの実行のみが停止しますが、指定されたping回数に達するまでping応答は続行されます。
スクリプトファイルの実行を停止した後にpingを防ぐための提案はありますか?
答え1
通常、シェルを呼び出すとシグナル(Java)を送信してCtrl+C
親プロセスのプロセスを終了します。Process.destroy()
これらのタスクを実行するためのきちんとしたツールは、いくつかのpkill
パターンでプロセスを終了できることです。
pkill ping
一般ユーザーは他のユーザーのプロセスを終了できないため、正しいユーザーIDで正しいコンピューターにログインしていることを確認してください。
ボーナスのヒント:pgrep -fl ping
一致するプロセスを一覧表示して、そのプロセスをすべて終了することを確認するために使用します。ルートとして実行するpkill ssh
と返品あなたを殺して、sshd
おそらくあなたを閉じ込めることができます。そのため、特にrootとして実行する場合(どうせ避ける必要がある場合)、慎重に確認してくださいpgrep
。
答え2
シェルプロセスとそれが生成する他のプロセスを終了するにsetpgid()
は、スクリプトを実行する前に子プロセスで新しいプロセスグループを起動し、親プロセスの戻り値を使用してそのプロセスグループを終了することをお勧めします。fork()
execve()
kill(-pid)
pid
fork()
setpgid()
電話をかけられない場合でも、次のことができます。
変える:
run("your-script its args");
する:
run("set -m; trap 'kill %' TERM; your-script its args & wait")
答え3
キルを使用してください。例えば。 「killall スクリプト名」。 Killallは名前でプロセスを終了します。また、同様の信号を送信することもできます。 SIGKILL、SIGSTOPなど
答え4
作成したプロセスIDを取得します。
ps -ef|grep pingIP |grep -v 'grep pingIP'
次に、次を使用して子プロセスを終了します。
pkill -P process-id