windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下
下面写一个创建进程和简单的控制示例,首先创建一个小程序,作为子进程的实体
CreateProcess的参数虽然多而且麻烦,其实大部分设置为NULL即可,右边这个链接里面有多进程编程相关的函数介绍:http://blog.csdn.net/bxhj3014/article/details/2082255
=======================CreateProcess()详解及用法=======================
CreateProcess() 函数原型如下:
01
02
03
04
05
06
07
08
09
10
11
12
|
BOOL
WINAPI CreateProcess(
__in_opt
LPCTSTR
lpApplicationName,
__inout_opt
LPTSTR
lpCommandLine,
__in_opt LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in
BOOL
bInheritHandles,
__in
DWORD
dwCreationFlags,
__in_opt
LPVOID
lpEnvironment,
__in_opt
LPCTSTR
lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#include "stdafx.h"
#include <locale.h>
#include <Windows.h>
int
_tmain(
int
argc, _TCHAR* argv[])
{
PROCESS_INFORMATION ProInfo;
//进程信息结构
STARTUPINFO StartInfo;
ZeroMemory ( &StartInfo,
sizeof
(StartInfo));
LPTSTR
szPrameter = TEXT(
"C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe [url]www.groad.net[/url]"
);
TCHAR
szCmdLine[2048] = {0};
CopyMemory(szCmdLine, szPrameter, 2*_tcslen(szPrameter));
ZeroMemory (&ProInfo,
sizeof
(ProInfo));
if
(!CreateProcess ( NULL,
// 执行的程序名
szCmdLine,
// 命令行指定
NULL,
// 进程安全属性,NULL 时使用默认安全属性
NULL,
// 线程安全属性,NULL 时使用默认安全属性
FALSE,
// 不继承句柄
0,
// 进程创建标志
NULL,
// 环境变量块,为 NULL 时使用父进程环境变量
NULL,
// 新进程目录
&StartInfo,
// 启动信息结构
&ProInfo)
// 进程信息结构
) {
_tprintf (TEXT(
"CreateProcess failed : %d\n"
), GetLastError());
return
(-1);
}
// 等待子进程结束
WaitForSingleObject(ProInfo.hProcess, INFINITE);
CloseHandle ( ProInfo.hProcess );
CloseHandle ( ProInfo.hThread );
return
0;
}
|
另外,程序中使用了 WaitForSingleObject() 函数以等待子进程的退出,如当我们关闭了浏览器,那么上面的程序也随之结束,否则一直在那等待。
转:http://www.groad.net/bbs/thread-6367-1-1.html