在一定时间后杀死for循环生成的进程

时间:2013-04-04 14:26:26

标签: bash for-loop ssh

我有一些代码往往会随机挂在它的'for循环'中。我正在寻找一种解决方案,如果它存在5秒钟,它将自动终止ssh会话的PID。我现在手动杀死挂起的进程,但我想把它放在cron中,所以自动PID查杀会很棒。

for host in `cat $WORKDIR/linux_hosts.txt $WORKDIR/aix_hosts.txt`
do
    ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t $host "cat /etc/passwd" >> $FILEDIR/$host
done

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

在后台运行所有ssh进程,然后等待5秒。 sleep返回后,使用jobs -p获取仍在运行的所有后台作业的进程ID,并将其终止。

cat "$WORKDIR"/{linux_hosts.txt,aix_hosts.txt} | while read host; do
    ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t "$host" "cat /etc/passwd" >> "$FILEDIR/$host" &
done
sleep 5
kill $(jobs -p) 2>/dev/null

答案 1 :(得分:0)

使用timeout

for host in `cat $WORKDIR/linux_hosts.txt $WORKDIR/aix_hosts.txt`
do
    timeout 5s ssh -o LogLevel=QUIET -o ConnectTimeout=2 -t $host \
                   "cat /etc/passwd" >> $FILEDIR/$host
done

答案 2 :(得分:0)

这将查找并删除超过5分钟的所有ssh进程。

cd /proc
kill $(find $(pidof ssh) -maxdepth 0 -mmin +5)