进程(一)

定义

进程被定义为程序运行的一个实例,一个程序可以对应多个进程,而程序只是一个文件

进程的组成:内核对象+地址空间

注意:进程从来不运行任何东西,运行东西的是它里面的线程,进程只是线程的容器

子进程和父进程:父进程结束运行了,子进程不一定结束

创建进程函数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也没关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值