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 }

windows系统调用 进程终止,布布扣,bubuko.com

时间: 2024-10-10 23:44:45

windows系统调用 进程终止的相关文章

windows系统调用 进程快照

1 #include "windows.h" 2 #include "tlhelp32.h" 3 #include "iostream" 4 using namespace std; 5 6 #pragma comment(lib,"kernel32.lib") 7 8 DWORD GetKernelModePercentage(const FILETIME& ftKernel, 9 const FILETIME&am

windows系统调用 利用事件对象实现进程通信

1 #include "iostream" 2 #include "windows.h" 3 #include "cstring" 4 using namespace std; 5 6 static LPCTSTR g_szContinueEvent="w2kdg.EventDemo.event.Continue"; 7 8 BOOL CreateChild(){ 9 TCHAR szFilename[MAX_PATH]; 1

Windows Internals 笔记——终止进程

1.进程可以通过以下四种方式终止: 主线程的入口点函数返回(强烈推荐的方式) 进程中的一个线程调用ExitProcess函数(避免这种方式) 另一个进程中的线程调用TerminateProcess函数(避免这种方式) 进程中的所有线程都“自然死亡”(这种情况几乎从来都不会发生) 2.应该保证只有在主线程的入口点函数返回之后,这个应用程序的进程才终止,只有这样才能保证主线程的所有资源都被正确清理.让主线程的入口点函数返回,可以保证以下操作会被执行: 该线程创建的任何C++对象都将由这些对象的析构函

进程终止和exit函数

内核要执行一个应用程序,唯一的途径是通过系统调用,exec函数,exec又会调用启动程序,启动程序(通常是汇编语言)以类似下面的方式调用main函数: void exit(main(argc, argv)); 那么在main函数末尾使用exit(0)和使用return 0是等价的.这里有三个正常终止程序的函数: void exit(int status); // 先执行一些清理操作,然后进入内核 void _Exit(int status); // 立即进入内核,可在所有函数中调用 void _

关于Windows创建进程的过程

之前有听到别人的面试题是问系统创建进程的具体过程是什么,首先想到的是CreateProcess,但是对于具体过程却不是很清楚,今天整理一下. 从操作系统的角度来说 创建进程步骤:        1.申请进程块              2.为进程分配内存资源        3.初始化进程块        4.将进程块链入就绪队列 课本上的知识... 从CreateProcess的具体流程来说: CreateProcess它首先创建一个执行体进程对象,即EPROCESS 对象,然后创建一个初始线程

Win32进程创建、进程快照、进程终止用例

进程创建: 1 #include <windows.h> 2 #include <stdio.h> 3 4 int main() 5 { 6 // 创建打开系统自带记事本进程 7 STARTUPINFO si1 = {sizeof(si1)}; 8 PROCESS_INFORMATION pi1; 9 char * szCmdLine1 = "notepad"; 10 if(::CreateProcess(NULL, szCmdLine1, NULL, NULL

[学习笔记]进程终止的5种方式

进程终止的5种方式 q  正常退出 q  从main函数返回 q  调用exit q  调用_exit q  异常退出 q  调用abort   产生SIGABOUT信号 q  由信号终止  ctrl+c SIGINT eg: 区别1:清空缓冲区的操作 int main(void) { printf("hello itcast"); //return 0; //exit(0); fflush(stdout); _exit(0); } 区别2:exit会调用终止处理程序 有关终止处理程序

windows下进程与线程剖析

进程与线程的解析 进程:一个正在运行的程序的实例,由两部分组成: 1.一个内核对象,操作系统用它来管理进程.内核对象也是系统保存进程统计信息的地方. 2.一个地址空间,其中包含所有可执行文件或DLL模块的代码和数据.此外,它还包含动态内存分配,比如线程堆栈和堆的分配. 进程要做任何事情,都必须让一个线程在它的上下文中运行.该线程负责执行进程地址空间包含的代码.事实上,一个进程可以有多个线程,所有线程都在进程的地 址空间中"同时"执行代码.为此,每个线程都有它自己的一组CPU寄存器和它自

windows编程 进程的创建销毁和分析

Windows程序设计:进程进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动,在Windows编程环境下,主要由两大元素组成:? 一个是操作系统用来管理进程的内核对象.操作系统使用内核对象来存放关于进程的核心信息.? 另一个是地址空间,在地址空间囊括了所有可执行模块和动态链接库的代码和数据.动态内存分配的空间也在其中,典型代表是线程堆栈和堆内存分配.1进程与线程进程是不活泼的.当进程开始工作的时候,它必须启动一个在当前进程上下文中的线程来执行工作流程.这个线程被称为主线程,它负责执