我正在尝试在后台启动远程计算机上的作业并获取其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 :(得分:3)
你得到了错误,因为你';'是多余的,试试'vmstat 1 1000> vmstat.log& echo $!'
但我不确定它会起作用,因为在您注销后,该过程将收到SIGHUP。看看nohup(1)。
答案 1 :(得分:2)
尝试用花括号围绕背景命令:
PID=`$REMOTE_EXEC '{ vmstat 1 1000 > vmstat.log & }; echo $!'`
答案 2 :(得分:0)
如果你使用弱引用,你需要逃避$!如下:
$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \$!"
或
P=`$REMOTE_EXEC "{ vmstat 1 1000 > vmstat.log & }; echo \\\$!"`