Fast bowlers Kagiso Rabada and Vernon Philander haunted Sri Lanka's batsmen as South Africa took full control of the third test on Day 2 at the Wanderers.
Rabada and Philander added four more wickets to the 17 they claimed in the last match as Sri Lanka limped to 80-4 in response to South Africa's 426 all out.
Although Sri Lanka enjoyed a strong start to the day, taking South Africa's last seven wickets for the addition of only 88 runs, its batsmen were once again unable to contend with the pace duo.
Philander had opener Dimuth Karunaratne caught behind in the first over of Sri Lanka's reply and also dismissed Dhananjaya de Silva (10), while Rabada nipped out Kaushal Silva (13) and Kusal Mendis (41) shortly after the tea break.
Philander had figures of 2-26 and Rabada had 2-23 when bad light brought the day's play to a premature close.
South Africa's first day total of 338-3 had been built on the back of Hashim Amla's unbeaten hundred in his 100th test and JP Duminy's superb 155 as they shared a 292-run stand for the third wicket. But Sri Lanka's seamers were much improved on the second day as they made the most of a lively pitch, with Suranga Lakmal unlucky not to pick up early wickets in a fierce spell up front.
Angelo Mathews was also accurate and dismissed nightwatchman Duanne Olivier, before Nuwan Pradeep hit the line and length required to find the edge of the bat and claimed four wickets in the morning session.
After Faf du Plessis (16) and Temba Bavuma (0) were both caught in the slips, Amla (134) was brilliantly caught by wicketkeeper Dinesh Chandimal as he dived to his right.
Philander (0) followed soon after, as Pradeep's morning spell yielded 4-25 in seven overs and South Africa went to lunch on 398-8.
After the interval, Kumara grabbed the final two wickets, with Wayne Parnell (23) and Quinton de Kock (33) both caught at deep point as they looked for quick runs.
Pradeep finished with figures of 4-78 and Kumara took 4-107, but their efforts began to look fruitless once Rabada and Philander had a turn on the same surface.