0

バックグラウンドでコマンドを無限ループで実行するスクリプト

<SOMETHING ELSE AT START OF SCRIPT>

cmd='while true;
do
    ps aux | head;
    sleep 1;
done > $FILE'    

ssh root@$SERVER $cmd &
...
...
<SOME OTHER TASKS>
...
...
( at the end of this script, how to kill the above snippet executing in remote server)
[ kindly note i dont want to wait as the while loop is infinite ]

stackoverflow からいくつかの投稿を読んで試してみましたが、この問題の正確な解決策を見つけることができませんでした。

4

4 に答える 4

1

スクリプトの最後でバックグラウンドで実行されている ssh プロセスを強制終了するには、次のようにします。

kill $!

これが、バックグラウンドで開始した唯一の (または最後の) プロセスであると思います。

于 2012-09-25T14:34:41.383 に答える
1

無限ループではなく、センチネル ファイルを使用します。

cmd='while [ -r /tmp/somefile];
do
  # stuff
done > $FILE'

ssh root@$SERVER touch /tmp/somefile
ssh root@$SERVER $cmd &
# do other stuff
ssh root@$SERVER rm -f /tmp/somefile

これは、リモートコマンドを変数に入れるという現在の慣行に従いますが、他の場所で引用されたものに対する引数を考慮する必要があります。

于 2012-09-25T15:08:11.513 に答える
0

ログインしているユーザーに属するすべてのものを強制終了するには、次のことを試してください。

 whois=`w|grep $user|awk '{print $2}'`;user=root; ssh $user@server -C "ps auwx|grep $whois|awk '{print \$2}'"

これにより、ログインしたばかりのユーザーが所有するすべてのプロセスが一覧表示されます-| xargskill-9を追加するだけです

 whois=`w|grep $user|awk '{print $2}'`;user=root; ssh $user@server -C "ps auwx|grep $whois|awk '{print \$2}'|xargs kill -9  "


 whois=`w|grep $user|awk '{print $2}'`;user=root; ssh $user@server -C "ps auwx|grep $whois|awk '{print \$2}'|awk '{print "kill -9 " $1}'|/bin/sh "
于 2012-09-25T15:33:41.463 に答える
0

次のシーケンスを試してください

CTRL+Z
fg
CTRL+C

また

jobs
kill %jobspec
于 2012-09-25T14:55:21.090 に答える