进程
2021/12/30 7:09:05
本文主要是介绍进程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、进程内存空间的地址划分
每个程序都有自己独立的4G虚拟内存,只有当你真正申请的时候,才会把内存分给你
二、进程的创建
1、每个进程都是由别的进程创建的,explorer.exe,explorer调用了一个函数CreatProcess()
2、进程的创建
- 映射EXE文件
- 创建内核对象EPROCESS
- 映射系统DLL(ntdll.dll)
- 创建线程内核对象ETHREAD
- 系统启动线程
- 映射DLL
- 线程开始执行
三、进程
1、命令行参数
#include "stdafx.h" //********************************************************************** int main(int argc, char* argv[]) { printf("%s - %s - %s",argv[0],argv[1],argv[2]); getchar(); return 0; }
2、创建一个子进程打开IE浏览器
#include "stdafx.h" #include "windows.h" //打开子进程函数 BOOL CreateProcess(PTCHAR route,PTCHAR szCommandLine) { //定义两个结构体 STARTUPINFO si; PROCESS_INFORMATION pi ; //初始化结构体 ZeroMemory(&pi,sizeof(pi)); ZeroMemory(&si,sizeof(si)); //si结构体的cb 必须要赋值 si.cb = sizeof(si); //创建子程序 返回成功与失败 if(!CreateProcess( route, //打开程序的路径 szCommandLine, //命令行参数 NULL, //进程相关的属性(是否可以被继承) NULL, //线程程相关的属性(是否可以被继承) FALSE, //创建子进程,允不允许子进程继承父进程的句柄表 0, //填NULL子进程共享父进程的控制台 NULL, NULL, //创建的子进程获取的当前目录是父进程的当前目录,如果子进程想得到自己真实的当前目录此处不能选NULL &si, //创建子进程的详细信息 &pi) //存储的是进程ID,线程ID,进程句柄,线程句柄 ) {//打印错误信息 printf("Error:%d\n",GetLastError()); return FALSE; } //打印线程进程id,线程id,进程句柄,线程句柄 printf("%d %d %d %d\n",pi.dwProcessId,pi.dwThreadId,pi.hProcess,pi.hThread); //释放句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return TRUE; } int main(int argc, char* argv[]) { TCHAR route[] = TEXT("C://Program Files//Internet Explorer//IEXPLORE.exe"); //命令行参数,记得加个空格以防不认识参数 TCHAR szCmdLine[] = TEXT(" http://www.baidu.com/"); CreateProcess(route,szCmdLine); //程序路径,命令行参数 getchar(); return 0; }
四、句柄和ID
1、都是系统分配的一个编号,句柄是客户程序使用 ID主要是系统调度时使用.
2、调用CloseHandle关闭进程或者线程句柄的时候,只是让内核计数器减少一个,并不是终止进程或者线程. 进程或线程将继续运行,直到它自己终止运行。
3、进程ID与线程ID 是不可能相同。但不要通过进程或者线程的ID来操作进程或者线程,因为,这个编号是会重复使用的,也就是说,当你通过ID=100这个编号去访问一个进程的时候,它已经结束了,而且系统将这个编号赋给了另外一个进程或者线程.
这篇关于进程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-26敏捷开发:想要快速交付就必须舍弃产品质量?
- 2024-04-26静态代码分析的这些好处,我竟然都不知道?
- 2024-04-26你在测试金字塔的哪一层?(下)
- 2024-04-26快刀斩乱麻,DevOps让代码评审也自动起来
- 2024-04-262024年最好用的10款ER图神器!
- 2024-04-2203-为啥大模型LLM还没能完全替代你?
- 2024-04-2101-大语言模型发展
- 2024-04-17基于SpringWeb MultipartFile文件上传、下载功能
- 2024-04-14个人开发者,Spring Boot 项目如何部署
- 2024-04-14RAG应用开发实战02-相似性检索的关键 - Embedding