进程

一、进程是程序运行的一个实例,程序可以有多个实例(多个进程)

 

二、获取进程句柄、进程ID

       1.获取当前进程句柄

 

NDLE WINAPI GetCurrentProcess(void);


       2.获取进程ID

 

 

DWORD WINAPI GetProcessId(
  __in          HANDLE Process
);


       3.获取进程会话ID

 

 

BOOL ProcessIdToSessionId(
  __in          DWORD dwProcessId,
  __out         DWORD* pSessionId
);

 

 

三、进程包含两方面

 

       1.进程内核对象

 

Ø 一个内核对象,被系统用来管理这个进程,这个内核对象中,还包含了进程的一些策略信息。

       2.进程地址空间

Ø 一个地址空间,这个地址空间中包含了可执行代码,动态链接库模块代码,数据,程序动态内存分配获取的内存,也在这个内存地址空间中。

 

 

四、进程必须有一个主线程,线程是运行单位,如果进程内所有线程退出,那么进程自动销毁!调用ExitProcess函数,也可以结束进程。

 

五、我们所编写的windows程序中,真正第一个被执行的函数是:

       图像界面的入口函数是:_tWinMain,控制台程序的入口函数是_tmain

WinMainCRTStartup//GUI_ASCII字符类型的C运行时库中的入口函数
wWinMainCRTStartup// GUI_UNICODE字符类型的C运行时库中的入口函数
mainCRTStartup// CUI_ASCII字符类型的C运行时库中的入口函数
wmainCRTStartup// CUI_UNICODE字符类型的C运行时库中的入口函数
       C运行时库函数,主要完成以下任务:

1.      获取进程命令行指针;

2.      获取进程环境变量指针;

3.      初始化C/C++运行时库的全局变量,如果你包含了头Stdlib.h,那么你就可以访问这些变量!//errno这就是一个全局变量。_enrion这是环境变量指针

4.      初始化malloc函数的内存堆;

5.      为C++全局类,调用构造函数。

Kenerl 调用XXXCRTStartup函数,XXXCRTStartup函数调用main函数;

 

main函数退出;

exit函数被调用(真正调用的是crt0dat.c中的)

 

static void __cdecl doexit (
        intcode,
        intquick,
        intretcaller
        )

 

这个函数主要做以下事情:

1.      调用_onexit函数注册的所有函数;

2.      调用C++销毁函数销毁所有的全局和静态类对象;

3.      如果_CRTDBG_LEAK_CHECK_DF标志被设置,那么调用CrtDumpMemoryLeaks函数,列出泄露内存。

4.      调用ExitProcess函数,系统杀死当前进程!

 





转载于:https://www.cnblogs.com/jadeshu/p/10663717.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值