A.J. Pierzynski hit a two-run homer to help the White Sox to fourth consecutive win overall and fifth in a row over the Royals.
While Chicago improved the best record in the major leagues to 20-7, the last-place Royals lost for the 14th time in 17 games and dropped to 7-20 despite outhitting the White Sox 9-6.
"I'm not happy," said Pena, whose yelling could be heard from outside the clubhouse. "It's not the effort, they give me effort. I just see something that don't like."
Chicago increased its AL Central lead to 4½ games over second-place Minnesota and is 17-4 in the division.
"I expect us to do even better," said Dustin Hermanson, who earned his fourth save with 1 2/3 innings of relief. "This a good team here. It's a long season to go, it is a marathon. But this isn't a fluke."
Former Royal Jermaine Dye's RBI single broke a 1-1 tie in the fourth, and Pierzynski followed with his second homer of the season. Aaron Rowand started the rally with a two-out bloop single and scored on Dye's hit.
"We're coming up with big hits in timely fashion and our pitchers are doing a heck of a job keeping us in the ballgame," Dye said.
Freddy Garcia (3-1) gave up two runs and eight hits in 6 1/3 innings and Hermanson, Chicago's fifth pitcher, recorded five consecutive outs.
"Freddy threw the ball better today," White Sox manager Ozzie Guillen said. "He came out and threw strikes, and his fastball looked pretty good today."
Hermanson came in with one runner on in the eighth and induced a flyout and strikeout to end the inning, then retired the side in the ninth on two groundouts and a popout. Hermanson has not allowed a run in 13 innings over 11 appearances this season.
"We're not scoring that many runs right now," Guillen said. "If we don't play good defense, we're in trouble."
Runelvys Hernandez (1-4) lost his fourth decision in a row, giving up four runs and six hits in 7 1/3 innings. All but one of the batters who reached on the first five hits Hernandez allowed scored.
"Today was one of my best games and nothing, you know," Hernandez said.
"He pitched well," Pena said. "The one bad inning was it."
Garcia was in and out of jams all game and his bullpen inherited one in the seventh. Garcia was pulled with one out and two men on.
After a passed ball advanced the runners to second and third, Neal Cotts loaded the bases with a walk to Ruben Gotay. Cliff Politte came in and gave up Mike Sweeney's sacrifice fly to center, with Mark Teahen sliding to just beat the throw from Rowand on a close play. Politte then struck out Ken Harvey to end the inning.
Kansas City took a 1-0 lead in the third on Sweeney's two-out double. Uribe's relay throw to Pierzynski at the plate was in time to catch David DeJesus, but the ball sailed a little wide and Pierzynski couldn't hold on.
Joe Crede homered in the bottom half.
Sweeney has 10 doubles, tied for the AL lead. ... Dye hit his first triple of the season in the second inning ... White Sox TV announcer Ken Harrelson had surgery Wednesday to repair a detached retina in his right eye. He will miss the rest of this series and the upcoming six-game trip. ... Paul Konerko is hitless in his last 22 at-bats. ... Dye went 2-for-3 to improve his average to .207. ... Teahan went 2-for-3 for his first career multihit game, raising his average to .286.