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

尝试以下顺序

CTRL+Z
fg
CTRL+C

或者

jobs
kill %jobspec
于 2012-09-25T14:55:21.090 回答
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 "
于 2012-09-25T15:33:41.463 回答