定义
进程被定义为程序运行的一个实例,一个程序可以对应多个进程,而程序只是一个文件
进程的组成:内核对象+地址空间
注意:进程从来不运行任何东西,运行东西的是它里面的线程,进程只是线程的容器
子进程和父进程:父进程结束运行了,子进程不一定结束
创建进程函数CreateProcess,具体参数我们看代码
代码
我们调用Chrome.exe进程
int main()
{
runexe(); system("pause"); return 0;
}
int runexe() {
STARTUPINFOW stringStartupInfo;
memset(&stringStartupInfo, 0, sizeof(stringStartupInfo));
stringStartupInfo.cb = sizeof(stringStartupInfo);
PROCESS_INFORMATION ProcessInformation;
memset(&ProcessInformation, 0, sizeof(ProcessInformation));
TCHAR szCommLine[] = L"C:\\chrome.exe";
bool b=CreateProcess(NULL, szCommLine, NULL, NULL,
FALSE, CREATE_NEW_CONSOLE,
NULL, NULL, &stringStartupInfo,
&ProcessInformation);
这里的路径szCommline为什么要加L呢,因为它是一个WCHAR类型。 也可以写成
TCHAR szCommLine[] = L"\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\"https://hao.360.com/?a1004/";
这就是通过谷歌打开360网址
CreateProcess第一个参数进程名,一般设置为空,第二个表示命令行参数,第三个、四个设置为null,第五个继承和不继承 我们填false,第六个控制优先级的选择,有很多参数可以选择,我们填CREATE_NEW_CONSOLE,第七个第八个填null,第九个要填STARTUPINFOW的指针,第十个填PROCESS_INFORMATION的指针,我们在上面声明这两个类型的指针,并将它们设置为0,
if (b)
{
std::cout << "create success:" << b<<std::endl;
WaitForSingleObject(ProcessInformation.hProcess, 3000);
CloseHandle(ProcessInformation.hProcess);
CloseHandle(ProcessInformation.hThread);
ProcessInformation.dwProcessId = 0;
ProcessInformation.dwThreadId = 0;
ProcessInformation.hThread = NULL;
ProcessInformation.hProcess = NULL;
}
else
{
std::cout<<"error:"<<GetLastError()<< std::endl;
}
访问了进程和线程就要关闭它们的句柄,第五行和第六行来关闭,并将它们的ID置0,并且它们的句柄也要置0,这两个句柄不置0也没关系