Cahill (15-6) allowed four hits to go with a career-high six walks and four strikeouts for the Athletics, who have won the first two games of this set following a four-game skid.
Mark Ellis, Cliff Pennington, and Jack Cust each had an RBI for Oakland.
Torii Hunter hit a solo homer for Los Angeles, which has lost nine of its last 12 games. Jered Weaver (11-11) gave up three runs on six hits over seven innings. He also struck out five and walked three in his fourth straight loss.
The A's got on the board in the first. Daric Barton singled, moved to second on a Kurt Suzuki groundout, and scored on Cust's base hit to right.
Oakland added another run in the second to build a 2-0 lead. Rajai Davis hit a two-out double and crossed the plate on Pennington's single. Pennington was thrown out trying to go to second on the play.
The Angels loaded the bases with two outs in the third, but Hideki Matsui flied out to end the threat.
The Athletics scored a run in the sixth to make it a 3-0 game. With a man on second and two outs, Ellis hit an RBI base hit up the middle.
Hunter's homer to center off Craig Breslow in the eighth cut the gap to 3-1.
Andrew Bailey tossed a perfect ninth for Oakland to record his 21st save of the year.
The A's lead the season series with the Angels, 8-7...Weaver fell to 3-6 lifetime against Oakland...Cahill improved to 4-1 in his career versus the Angels, who went 0-for-4 with runners in scoring position and stranded eight.