我有一些代码往往会随机挂在它的'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
感谢您的帮助!
答案 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)