首页 > 代码库 > windows系统调用 进程终止

windows系统调用 进程终止

 1 #include "windows.h"
 2 #include "iostream"
 3 #include "stdio.h"
 4 using namespace std;
 5 
 6 static LPCTSTR q_szMutexName="w2kdg.ProcTerm.mutex.Suicide";
 7 
 8 HANDLE StartClone(){
 9     TCHAR szFilename[MAX_PATH];
10     GetModuleFileName(NULL,szFilename,MAX_PATH);
11 
12     TCHAR szCmdLine[MAX_PATH];
13     sprintf_s(szCmdLine,"\"%s\" \"child\"",szFilename);14 
15     STARTUPINFO si;
16 
17     ZeroMemory(reinterpret_cast<void*>(&si),sizeof(si));
18     si.cb=sizeof(si);
19     PROCESS_INFORMATION pi;
20 
21     BOOL bCreateOK=CreateProcess(
22         szFilename,
23         szCmdLine,
24         NULL,
25         NULL,
26         FALSE,
27         CREATE_NEW_CONSOLE,
28         NULL,
29         NULL,
30         &si,
31         &pi
32         );
33 
34     if(bCreateOK){
35         CloseHandle(pi.hProcess);
36         CloseHandle(pi.hThread);
37         return pi.hProcess;
38     }
39 
40     else return INVALID_HANDLE_VALUE;
41 }
42 
43 void Parent(){
44     cout<<"Creating the child process and waited child process to quit."<<endl;
45     HANDLE hchild=StartClone();
46     if(hchild!=INVALID_HANDLE_VALUE)
47     {
48         WaitForSingleObject(hchild,INFINITE);
49         cout<<"The child process had quited."<<endl;
50 
51     }
52 
53     else 
54         cout<<"Create child process failed."<<endl;
55 }
56 
57 
58 void Child(){
59     cout<<"Child id quiting"<<endl;
60     Sleep(5000);
61 
62 }
63 
64 int main(int argc,char * argv[]){
65     if(argc>1&&strcmp(argv[1],"child")==0){
66         Child();
67     }
68     else{
69         Parent();
70     }
71     return 0;
72 
73 }