Dale Steyn struck two crucial early blows for South Africa on the fifth day of the second and final Test against India at Kingsmead on Monday.
India were 173 for seven in their second innings at lunch, a slender lead of seven runs.
Steyn dismissed India's overnight batsmen, Virat Kohli and Cheteshwar Pujara, in his first two overs of the day after India resumed on 68 for two. Vernon Philander dismissed Rohit Sharma and left-arm spinner Robin Peterson took two wickets in one over to leave India facing defeat.
Ajinkya Rahane carried India's hopes and was unbeaten on 50, his second half-century of the match.
Kohli was given out to the first ball of a bright, sunny morning, pushing at a fast, rising delivery outside his off stump.
Kohli looked shocked by umpire Rod Tucker's decision and replays indicated the ball may have brushed his shirt sleeve after going past the outside edge of his bat.
There is no decision review system in place for the series because India have rejected using technology for anything other than line decisions.
With Kohli gone, Pujara loomed as the biggest obstacle to South Africa's push for a win which would clinch the two-match series. But he was beaten by a ball which straightened past his forward defensive stroke and clipped the top of his off stump.
Neither batsmen added to their overnight scores of 11 and 32 respectively.
Rohit Sharma and Ajinkya Rahane resisted for more than an hour, adding 33 runs, before Sharma was trapped leg before wicket by a ball from Vernon Philander which seamed back at him.
Indian captain Mahendra Singh Dhoni looked to counter-attack before whipping a ball from Peterson straight to Alviro Petersen at midwicket.
Ravindra Jadeja hit a six off Peterson but in attempting to repeat the shot sliced the ball high to mid-off where Morne Morkel held a well-judged catch. – AFP