"I know it's a hitter's park, but if you keep the ball down, you give yourself a chance," Chen said.
Chen (12-8) finished 3-1 this season against the White Sox, with all three of the wins at U.S. Cellular Field. His lone loss to Chicago came last Sunday in Kansas City, when he gave up nine hits and four runs in 5 1/3 innings.
The only hit allowed by Chen through the first six innings was an infield single by Dayan Viciedo in the second. It was a grounder in the hole that third baseman Mike Moustakas fielded, and he spun around and threw high to first. Paul Konerko hit his 31st homer in the seventh inning.
Chen walked one and struck out four. Vin Mazzaro pitched a hitless ninth.
"Bruce has been good against us and pitching well all year long. Now it's no mystery," said White Sox manager Ozzie Guillen, who was Chen's teammate with Atlanta in the late 1990s. "He owns the White Sox."
With Guillen's future unclear, Chicago has lost 10 of 13. And Friday night's defeat left the White Sox at 76-81, ensuring they won't have a winning record despite a $127 million payroll.
"Obviously it's been a very tough season for everyone," Guillen said.
Hosmer hit a solo shot in the second, his 19th of the season. Perez had a three-run drive in the fourth, his third of the season, and Escobar followed one batter later with his fourth homer of the season.
Francoeur connected for his 20th of the season, a two-run shot, in the fifth to reach the 20-20 plateau. He also has 22 steals.
"It was a lot of fun. It's something I really wanted to accomplish," Francoeur said.
"It's been a good year. To be able to do that tonight. I credit Seitz (hitting coach Kevin Seitzer), and with the base stealing, Siss (first base coach Doug Sisson) gets all that (credit). I came in the first day of camp and he was on my butt about stealing bases. He told me I'd steal 20. I didn't believe him."
Stewart, who gave up 12 hits and nine runs and also committed two errors in four-plus innings. Stewart (2-6) lost for the third straight time since pitching a one-hit shutout against the Twins on Sept. 5.
"It's very frustrating. ... it just makes you sick all the way around," Stewart said.
Kansas City finished with 18 hits, four by Moustakas.
CF Lorenzo Cain made his Royals' debut after spending the season with Triple-A Omaha and had two hits. Cain was acquired in a trade that sent Zack Greinke to Milwaukee. He played 43 games for the Brewers last season ... Everett Teaford (2-0) will pitch in Saturday's game against the White Sox. John Danks (7-12) goes for Chicago. Teaford beat the White Sox last Saturday in KC, giving up four hits and a run over six innings. Danks is 2-0 with a 2.37 ERA in three starts against the Royals this season and 4-0 with a 2.63 ERA in his career against the Royals.