선언:
C#
[DllImport("kernel32")]
public static extern Int32 TerminateProcess(IntPtr hProcess, Int32 ExitCode);
VB.NET
<DllImport("kernel32")> _
Public Shared Function TerminateProcess(ByVal hProcess As IntPtr, ByVal ExitCode As Int32) As Int32
End Function
사용 예제:
C#
using System;
using System.Runtime.InteropServices;
namespace ApiReference {
class ApiExample {
[DllImport("kernel32")]
public static extern Int32 TerminateProcess(IntPtr hProcess, Int32 ExitCode);
[DllImport("kernel32")]
public static extern void CloseHandle(IntPtr hProcess);
[DllImport("kernel32")]
public static extern IntPtr OpenProcess(Int32 Access, Boolean InheritHandle, Int32 ProcessId);
public const Int32 PROCESS_TERMINATE = 0x1;
public static void Main(string[] args) {
EnterPID:
Int32 ProcessId;
Console.Write("종료할 프로세스의 식별자(PID)를 입력하세요: ");
try {
ProcessId = Int32.Parse(Console.ReadLine());
} catch (Exception) {
Console.WriteLine("다시 입력하세요");
goto EnterPID;
}
IntPtr hProcess = OpenProcess(PROCESS_TERMINATE, false, ProcessId);
Boolean result = false;
if ( hProcess == IntPtr.Zero ) {
Console.WriteLine("프로세스 핸들 열기 실패!");
return;
}
if ( TerminateProcess(hProcess, 0) != 0 ) {
Console.WriteLine("프로세스 종료 성공!");
result = true;
} else {
Console.WriteLine("프로세스 종료 실패!");
}
CloseHandle(hProcess);
Console.ReadKey(true);
}
}
}
VB.NET
Imports System
Imports System.Runtime.InteropServices
Namespace ApiReference
Class ApiExample
<DllImport("kernel32")> _
Public Shared Function TerminateProcess(hProcess As IntPtr, ExitCode As Int32) As Int32
End Function
<DllImport("kernel32")> _
Public Shared Sub CloseHandle(hProcess As IntPtr)
End Sub
<DllImport("kernel32")> _
Public Shared Function OpenProcess(Access As Int32, InheritHandle As [Boolean], ProcessId As Int32) As IntPtr
End Function
Public Const PROCESS_TERMINATE As Int32 = &H1
Public Shared Sub Main(args As String())
EnterPID:
Dim ProcessId As Int32
Console.Write("종료할 프로세스의 식별자(PID)를 입력하세요: ")
Try
ProcessId = Int32.Parse(Console.ReadLine())
Catch generatedExceptionName As Exception
Console.WriteLine("다시 입력하세요")
GoTo EnterPID
End Try
Dim hProcess As IntPtr = OpenProcess(PROCESS_TERMINATE, False, ProcessId)
Dim result As [Boolean] = False
If hProcess = IntPtr.Zero Then
Console.WriteLine("프로세스 핸들 열기 실패!")
Return
End If
If TerminateProcess(hProcess, 0) <> 0 Then
Console.WriteLine("프로세스 종료 성공!")
result = True
Else
Console.WriteLine("프로세스 종료 실패!")
End If
CloseHandle(hProcess)
Console.ReadKey(True)
End Sub
End Class
End Namespace
예제 실행 결과:
매개 변수 설명:
hProcess - PROCESS_TERMINATE 권한으로 열린 프로세스의 핸들을 입력합니다.
ExitCode - 프로세스의 종료 코드를 입력합니다.
API 설명:
프로세스를 종료합니다.
참고:
TerminateProcess (MSDN)
Process Security And Access Rights (MSDN)
비고:
OpenProcess API를 사용하여 프로세스 핸들을 얻은 후에 TerminateProcess API를 호출함으로써,
프로세스를 강제로 종료할 수 있습니다. 단, 프로세스가 보호되었거나 PROCESS_TERMINATE 권한이 없을 경우엔
프로세스가 종료되지 않습니다.
'API Reference' 카테고리의 다른 글
7. CloseHandle (0) | 2014.09.11 |
---|---|
6. IsWow64Process (0) | 2014.09.10 |
4. OpenProcess (0) | 2013.12.12 |
3. NtQueryInformationProcess (0) | 2013.12.06 |
2. RemoveDirectory (0) | 2013.12.04 |