Bash脚本之后继续Telnet进程

时间:2015-01-23 21:06:26

标签: bash shell telnet

我正在运行以下脚本

#! /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。

1 个答案:

答案 0 :(得分:1)

你要杀死的pid是grep的pid,因为$!最近执行的后台命令的pid。如果你在试图杀死时没有扔掉stderr它可能提供了一些线索......

BTW,kill -9是一种严重的代码味道。任何表现良好的过程都可以被至少一个-INT-HUP-TERM-QUIT信号杀死。你永远不需要kill -KILL。这很糟糕,因为它没有给这个过程机会来清理它的混乱。

相关问题