2009-06-25 51 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 \\\$!"`