Colombo: Sri Lanka seam bowlers Nuwan Pradeep and Dhammika Prasad fought back with three early wickets as India closed day three of the third test at 21-3 on Sunday.
India went into the second innings with a 111-run lead — 312 to 201 — and is now 132 runs ahead of the hosts.
Prasad struck with the second ball of the innings to dismiss first-innings centurion Cheteshwar Pujara with no score on the board.
Pradeep bowled Lokesh Rahul (2) and trapped Ajinkya Rahane lbw for 4, as India went from 2-2 to 7-3.
Captain Virat Kohli (1) was undefeated with Rohit Sharma (14) when rain forced an early close of play.
Pradeep returned bowling figures of 2-6.
Earlier Indian fast bowler Ishant Sharma picked up a seventh five-wicket haul in test cricket to help India bowl out Sri Lanka for 201 after India made 312 in its first innings.
Sharma, who along with Stuart Binny rattled Sri Lanka's top order, finished with 5-54.
Sri Lanka lost six wickets for only 47 runs and was facing the prospect of a follow-on when Kusal Perera scored 55 on his test debut and shared a 79-run stand for the seventh wicket with Rangana Herath to carry Sri Lanka past the mark.
Herath made 49 and Sri Lanka's total was helped by tailenders Prasad (27) and Tharindu Kaushal (16).
Perera's resistance came after his last specialist batting partner Lahiru Thirmanne was out and Prasad had left the field temporarily with an injured hand. Perera batted in his usual attacking style and scored his runs off 56 balls including nine boundaries.
Upul Tharanga (4), Kaushal Silva (3), Dimuth Karunaratne (11), Dinesh Chandimal (23) and captain Angelo Mathews (1) were all out before lunch.
Tharanga was first to be dismissed with the total on 11, caught by Rahul at slip off Sharma. Silva was bowled off the edge, trying to leave a rising ball from seamer Umesh Yadav, without adding to the total.
Chandimal, the only top-order batsman to look occasionally at ease, was trapped lbw by Binny and Mathews edged Sharma to wicketkeeper Naman Ojha just before the break.
Resuming the day on 292-8, India opener Cheteshwar Pujara carried his bat through the first innings to finish unbeaten on 145.
Pujara, brought in to replace injured Murali Vijay, faced 289 deliveries in his knock and hit 14 boundaries.
He and Mishra (59) had shared a 104-run eighth wicket stand after India lost seven wickets for just 180.
Sri Lankan seam bowler Prasad took 4-100 while spinner Herath took three wickets. India made 312 in its first innings.