无法在bash脚本中杀死另一个ssh会话启动的进程

时间:2018-01-26 10:41:10

标签: linux bash ssh

我正在编写一个bash脚本,我需要通过ssh登录远程计算机,启动进程,结束ssh会话,执行其他操作,然后通过ssh再次登录以终止进程。但这个过程并没有被杀死。我尝试了很多方法。 以下是不起作用的脚本部分:

ssh localadmin@10.101.30.61 &>/dev/null << EOF
tshark -i ens160 -w /home/localadmin/dns_traffic_61.pcap &>/dev/null &
EOF


ssh localadmin@10.101.30.61 &>/dev/null << EOF
kill $(pidof tshark)
EOF

我也尝试将tshark命令放在脚本中,所以我会像这样杀死脚本:

ssh localadmin@10.101.30.61 &>/dev/null << EOF
sh tshark.sh &>/dev/null &
EOF

ssh localadmin@10.101.30.61 &>/dev/null << EOF
pid=$(ps -ef | grep tshark.sh | grep -v grep | awk '{print $2}')
kill $pid  
EOF

和此:

ps -ef | grep tshark.sh | grep -v grep | awk '{print $2}'|xargs kill

似乎没什么用。

注意:当我通过ssh手动连接时,我可以终止进程,只有bash脚本才能解决。

1 个答案:

答案 0 :(得分:2)

在结束标记周围使用单引号,以便扩展不会在当前shell中发生但在远程

ssh localadmin@10.101.30.61 &>/dev/null << 'EOF'
kill $(pidof tshark)
EOF

比较

cat << EOF
$$
EOF

cat << 'EOF'
$$
EOF