The film opens to the sounds of a couple having sex. Afterwards, Carlos the Jackal (Aidan Quinn) kills a spider in its web with his cigarette and evicts the woman(Lucie Laurier) from his room because he claims he has work to do. He is seen donning a disguise, and he walks to a cafe where CIA agent Jack Shaw (Donald Sutherland) is sitting at a table outdoors. He recognizes Shaw and asks for a light. Shaw does not recognize Carlos, because of his disguise, but he turns to watch Carlos enter the cafe. He watches as Carlos detonates a grenade, killing dozens of people.The film shows an event of attacking the OPEC meeting by the Jackal and his fellows in 1975.In the present day, Carlos is apprehended in an open air market and brutally interrogated by a Mossad commander named Amos (Ben Kingsley). Carlos claims to actually be a US Naval officer named Annibal Ramirez whose identification was lost in the chaos of his arrest. Amos confirms his identity and lets him go, stunned that Ramirez looks exactly like Carlos. Back at home, Ramirez is visited by Shaw who tries to recruit him to play Carlos' double. Ramirez is so embittered by his rough treatment in Amos' hands, that he insists he will sue and flatly rejects the idea of portraying Carlos. Shaw persists, wooing Ramirez on several occasions. He finally convinces Ramirez by showing him a child in a hospital who he claims is a victim of one of Carlos' bombings.Amos and Shaw train Ramirez at a remote location. Much of his training is devoted to situational awareness and internalizing details of Carlos' life. His training concludes with one of Carlos' ex-mistresses training Ramirez in how to make love like Carlos. The plan to catch Carlos revolves around convincing the KGB, which supports much of his terrorism, that he has begun to work with the CIA. The team lures one of Carlos' girlfriends to Libya, where Ramirez meets up with her, successfully posing as Carlos, even during their lovemaking. The girlfriend has become an informant for the French, however. Several French agents arrive at their apartment, and Ramirez is forced to kill them to survive. He is horrified at having to kill allies in his undercover operation.Carlos sends an assassin to kill the girlfriend in France, ordering him to leave Europe through London. The assassin happens to be in Heathrow airport at the same time as Ramirez, and he quickly realizes he is an impostor after Ramirez doesn't recognize him. The assassin forces Ramirez into a bathroom and a struggle ensues. Amos rushes in and manages to kill the assassin before being fatally shot. After Amos' death, the CIA shuts down the mission and Ramirez returns home.Back with his wife, he makes love to her as Carlos would, and she is disturbed by the change in his personality. The next day, at his son's little league game, he gets into a confrontation with another father and nearly kills him. Shaw bails him out of jail, and both men are clearly suffering deeply by not being able to finish their mission and kill Carlos.They head to East Berlin and conspicuously meet with each other. The KGB sees Ramirez meeting with Shaw and assumes Carlos has turned on them. They raid his hotel, but as they try to arrest them, he escapes. Shaw and Ramirez are waiting outside the hotel for him, and Ramirez fights Carlos on the bank of a river. It's impossible to tell which is the real Carlos during the struggle. As one of the men is being held under water by the other, Shaw comes upon them and shoots the man above the water several times. He realizes that he has shot Ramirez, and Carlos swims away. Ramirez presses Shaw to leave him and chase Carlos, but Shaw insists that their plan has worked and Carlos is a marked man by the KGB. One way or another, Shaw points out that Carlos' days as a terrorist are over.The deaths of Ramirez and his family are staged by Shaw, and in the final scene, the family are safely cavorting on a beach. Ramirez moves to kill a spider in its web with his cigarette, but appears to change his mind.
Output: Question: Who kills Carlos?, Answer: Shaw and Ramirez