2009-06-25 66 views
5

我想在后台启动远程计算机上的作业并获取其PID,以便稍后可以杀死它。到目前为止我所得到的是以下几点:获取在后台远程启动的作业的pid

#!/bin/bash 

IP=xxx.xxx.xxx.xx 
REMOTE_EXEC="ssh $IP -l root" 

# The following does NOT work, I am trying to get the PID of the remote job 
PID=`$REMOTE_EXEC 'vmstat 1 1000 > vmstat.log & ; echo $!'` 

# Launch apache benchmark 
ab -n 10 http://$IP/ 

$REMOTE_EXEC "kill $PID" 

不幸的是,它不起作用。我得到一个

bash: syntax error near unexpected token `;' 

但我不知道什么是正确的语法将是。

+0

只需: '的vmstat 1 1000> vmstat.log&; echo $!` 甚至不在本地。看看它。 – 2009-06-25 11:11:16

+0

是的,我知道。所以我需要修复'vmstat 1 1000> vmstat.log&; echo $!'或者我需要通过其他一些机制来获得远程作业的PID。 – davitenio 2009-06-25 11:16:15

+0

@davitenio不是PID最终成为本地ssh命令的PID,而是远程vmstat命令? – 2014-03-17 18:19:43

回答

3

你得到了错误,因为你';'是多余的,请尝试'vmstat 1 1000> vmstat.log & echo $!'

但我不确定它会工作,因为注销后,该进程将收到SIGHUP。看nohup(1)。

2

尝试在大括号包围的背景执行命令:

PID=`$REMOTE_EXEC '{ vmstat 1 1000 > vmstat.log & }; echo $!'` 
0

如果你使用弱引用,你需要$逃!如下所示:

$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \$!" 

P=`$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \\\$!"`