While checkin' for running ssh-agent the keychain script should not consider "defunct" process. I had a "defunct" ssh-agent and each new shell started a new ssh-agent because the first ssh-askpass process was "defunct". A simple pipe throw "grep -v defunct" does correct the problem.
Created attachment 17631 [details, diff] keychain.patch, added a pipe throw grep -v defunct
Fixed in keychain cvs
Released in keychain-2.3.4