0

我有一些代码往往会随机挂在它的“for循环”中。我正在寻找一种解决方案,如果 ssh 会话的 PID 存在 5 秒,它将自动终止它。我现在手动杀死挂起的进程,但我想把它放在 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

谢谢您的帮助!

4

3 回答 3

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
于 2013-04-04T14:41:58.567 回答
0

使用超时

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
于 2013-04-04T15:38:50.210 回答
0

这将找到并杀死所有ssh超过 5 分钟的进程。

cd /proc
kill $(find $(pidof ssh) -maxdepth 0 -mmin +5)
于 2013-04-04T16:12:08.773 回答