Sri Lanka, chasing 300 for victory, started brightly but were soon in trouble after losing wickets at regular intervals.
A dominant South Africa beat Sri Lanka by 96 runs in their opening Champions Trophy Group B game at The Oval on Saturday, helped by Hashim Amla's classy century.
South Africa's Morne Morkel made the first breakthrough when he dismissed the dangerous Niroshan Dickwella for 41 after the Sri Lanka opener's attempted drive down the ground resulted in a comfortable catch for Wayne Parnell at third man.
Skipper AB de Villiers chipped in with a stunning catch to send Kusal Mendis packing for 11 runs, nonchalantly plucking the ball out of the air one-handed, and then ran out Dinesh Chandimal for 12 with a direct hit.
With Sri Lanka suddenly reeling at 116-3, leg-spinner Imran Tahir got into the act, trapping Chamara Kapugedera leg-before for a duck, before enticing Upul Tharanga into a lofted drive that was caught by David Miller in the deep.
Sri Lanka heads dropped after the loss of Tharanga, who top-scored for them with 57 runs off 69 deliveries, and despite Kusal Perera chipping in with an unbeaten 44, South Africa mopped up the tail without major difficulty.
Man-of-the-match Tahir ran out Suranga Lakmal and struck twice more to get rid of Asela Gunaratne (4), and Nuwan Pradeep (5) as the Sri Lanka lower order collapsed.
South Africa started slowly after losing the toss, scoring 32 runs in the first ten overs before Quinton de Kock departed for 23 after edging a Nuwan Pradeep delivery to wicketkeeper Dickwella.
Amla (103) and Faf du Plessis (75) steadied the ship with a 145-run stand for the second wicket before Du Plessis departed after misjudging a Pradeep delivery and was caught by a diving Dinesh Chandimal at midwicket.
South Africa was still in the driving seat at that point but was soon put under pressure when De Villiers departed for four after the skipper mistimed a pull shot that Chamara Kapugedera caught comfortably.
Amla, whose knock moved him past India's Virat Kohli as the fastest player to reach 25 ODI centuries, was in excellent form until being run out.
He played with caution after the departure of De Villiers, focusing on rebuilding the innings with David Miller (18) and eventually reached his century in the 42nd over.
Miller departed after the next ball, and a tired Amla soon followed suit -- his despairing dive while coming back for a second was not enough to prevent Dickwella whipping off the bails after good work in the field by Mendis.
It was left to JP Duminy to provide the sting in the tail of the South African innings, which the left-hander did with a swashbuckling unbeaten 38 of 20 balls.
India and Pakistan, the other teams in Group B, meet on Sunday, with the top two advancing to the semi-finals.