개발노트/Delphi

[Delphi/초급] 프로세스를 강제종료하는방법 kill_Process

KIMPRO김프로 2020. 10. 13. 23:48

 

이번 포스팅에서는 프로세스를 강제종료하는방법을 배워보도록 할게요.

 

우선 프로세스이름을 알아야겠죠?

 

Project1.exe 이라는 프로세스를 강제로 종료해보려고해요.

 

우선 종료할 프로세스의 pid 프로세스아이디를 알아야하는데요.

 

프로세스 아이디를 변수에 먼저 저장을 해줘야합니다.

 

GetProcessID 를 이용하여 pid 를 가져올게요.

 

예제는 아래와 같습니다.

 

function GetProcessID(Process: String): Cardinal;
const PROCESS_TERMINATE=$0001;
var ContinueLoop: BOOL;
    FSnapshotHandle: THandle;
    FProcessEntry32: TProcessEntry32;
begin
 result:=0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(Process))
or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(Process))) then
begin
Result := FProcessEntry32.th32ProcessID;;
exit;
end
else begin
Result:=0;
end;
ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

이렇게 function 을 지정해주고,

 

var

ProcessID : cardinal;
 
begin
 
ProcessID := GetProcessID('Project1.exe');
 
 
end;

 

이렇게 하면 ProcessID 에 Project1.exe 의 pid 가 담기게 됩니다.

 

그럼 이제 구한 pid 값을 이용해서 프로세스를 종료해볼게요.

 

function kill_Process(pid: string): string;
var
  killer: THandle;
  code: string;

begin

  code := '';
  killer := OpenProcess(PROCESS_TERMINATE, FALSE, StrToInt(pid));

  if TerminateProcess(killer, 0) then
  begin
    code := '[+] Kill Process : OK';
  end
  else
  begin
    code := '[-] Kill Process : ERROR';
  end;


end;

kill_Process function 을 지정해주고

 

위에 코드에 합쳐서 사용하면~

 

var

ProcessID : cardinal;
 
begin
 
ProcessID := GetProcessID('Project1.exe');

kill_Process(inttostr(ProcessID));

end;

간단하죠?

 

위의 inttostr 은 int 값을 string 으로 변환해주는거에요.

 

kill_process 에 pid 는 string 으로 받아오도록 선언이 되어있기 때문이죠.

 

버튼이나 타이머에 넣어서 실행하면 Project1.exe 는 종료됩니다

 

이렇게 kill_Process을 사용하여 프로세스를 종료하는방법을 알아봤습니다.

 

모르시는부분이 있다면 댓글 남겨주시면 친절하게 답변 드리겠습니다~

 

감사합니다~