Daniel Lynch and four relievers held the Chicago White Sox in check, and Emmanuel Rivera's line drive was misplayed into an early two-run double Thursday night that helped the Kansas City Royals hang on for a 3-2 victory.
Kansas City won its second consecutive game, while the AL Central-leading White Sox lost for the ninth time in their last 14.
Chicago has scored two runs or fewer in three of its past four games.
White Sox designated hitter Eloy Jimenez hit a two-out RBI double that snapped an 0-for-13 slump, but reliever Scott Barlow ranged quickly to his right to field a grounder by Andrew Vaughn for the final out of the eighth.
Jake Brentz worked a hitless ninth for his first major league save.
White Sox left-hander Dallas Keuchel (7-5) gave up a two-run double to Rivera with two outs in the first. Center fielder Adam Engel stepped to his left, only to see Rivera's line drive sail behind him.
Chicago slugger Jose Abreu hit his second home run in two games, a solo shot off Lynch in the first. It marked the seventh time Abreu has reached 20 homers in a season, tying Harold Baines for third on the franchise list behind Paul Konerko (13) and Frank Thomas (11).
Abreu's 218th homer moved him within three of Baines for fourth place in club history. Last year's AL MVP has at least one RBI in each of his last six games.
Edward Olivares hit his third homer in four games for the Royals, a solo shot off reliever Reynaldo Lopez that barely eluded Engel's glove in right-center.
Lance Lynn (10-3, 2.07 ERA) takes the mound Friday against the crosstown-rival Cubs in the opener of a three-game series at Wrigley Field.