我正在运行以下脚本
#! /bin/bash
HOSTLIST="192.168.0.5 192.168.22.1"
DELAY=3
stty echo
exec 4>&1
for HOST in $HOSTLIST ; do
telnet $HOST 135 | grep Connected & pid=$!
echo "Checking $HOST"
sleep $DELAY
kill -9 $pid &> /dev/null
done
然而,当它完成时,仍然在后台尝试Telnet连接,在接下来的几分钟内随机发送令人讨厌的“telnet:无法连接”错误。我尝试添加杀死进程来阻止它,但它仍然这样做。我是不是因为杀了这个过程而做错了什么?
另外我必须使用telnet,不能使用netcat或nmap。
答案 0 :(得分:1)
你要杀死的pid是grep的pid,因为$!
是最近执行的后台命令的pid。如果你在试图杀死时没有扔掉stderr它可能提供了一些线索......
kill -9
是一种严重的代码味道。任何表现良好的过程都可以被至少一个-INT
,-HUP
,-TERM
或-QUIT
信号杀死。你永远不需要kill -KILL
。这很糟糕,因为它没有给这个过程机会来清理它的混乱。