windows - Dræb processen ved navn

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg dræbe en proces ved navn på Windows med API-funktioner?

Bedste reference


killall yourprocess


http://en.wikipedia.org/wiki/Killall (Bemærk, at dette kun gælder for Linux, som du ikke har angivet dit operativsystem) [5]

Andre referencer 1


Hvis du ved at dræbe betyder at du afslutter med ekstreme fordomme, er det altid TerminateProcess. Jeg anbefaler at bruge det, hvis du kan finde en anden måde (som f.eks. At sende WM\_CLOSE til hovedvinduet), fordi indlæste DLL'er ikke bliver losset korrekt, når du kalder TerminateProcess, så brugte ressourcer kan ikke blive frigivet.


Det egentlige problem er, hvordan man kommer fra et navn til et proces-id, det involverer normalt


EnumProcesses ()

EnumProcessModules ()

GetModuleFileNameEx ()

GetModuleBaseName ()


og sammenligne det resulterende basemodulnavn med det, du leder efter. Men der kan være mere end en forekomst af et modulnavn, der udføres på et system. Hvordan ville du skelne mellem forekomster i denne situation?

Andre referencer 2


I et cmd vindue kan du bruge taskkill /F /im cmd.exe til at dræbe alle cmd.exe programmer.


Flag /T fortæller taskkill at dræbe processerne kraftigt, mens
taskkill /im cmd.exe ynkeligt slukker den ved at sende et drædssignal.


flere oplysninger om taskkill kan findes her [6]


et andet godt værktøj til afslutning af processer er wmic [7]

Andre referencer 3


Forudsat at du mener på Windows, skal du bruge ZwQuerySystemInformation og TerminateProcess. Se her for en detaljeret prøve: Sådan dræber en proces givet et navn [8] [9] [10]