退出bash脚本时终止在远程服务器中启动的无限循环

时间:2012-09-25 14:25:13

标签: linux bash

在后台无限循环中执行命令的脚本

<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 个答案:

答案 0 :(得分:1)

如果你想杀死脚本末尾在后台运行的ssh进程,只需执行:

kill $!

我认为这是你在后台开始的唯一(或最后一个)过程。

答案 1 :(得分:1)

使用sentinel文件而不是无限循环:

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

这遵循您目前将远程命令放入变量的做法,但应考虑反对其他地方引用的参数。

答案 2 :(得分:0)

尝试以下序列

CTRL+Z
fg
CTRL+C

jobs
kill %jobspec

答案 3 :(得分:0)

要杀死属于登录用户的所有内容,您可以尝试:

 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}'|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 "