Windows系统——进程创建
程序员文章站
2022-07-05 13:08:05
...
Windows系统——进程创建CreateProcess()
实现代码
- 父进程
parent.cpp
/*
author : eclipse
email : [email protected]
time : Sun Apr 26 09:20:40 2020
*/
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int main(int argc, char const *argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (!CreateProcess(NULL,
"child.exe This is child!",
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi)) {
printf("Create Process error(%d)!\n", GetLastError());
return -1;
}
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
- 子进程
child.cpp
/*
author : eclipse
email : [email protected]
time : Sun Apr 26 09:23:37 2020
*/
#include<bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
printf("%s %s %s\n", argv[1], argv[2], argv[3]);
system("pause");
return 0;
}
注意
- 编译过程
g++ child.cpp -o child
g++ parent.cpp
a.exe
CreateProcess()
- 返回值
新建的进程句柄 - 函数原型
BOOL CreateProcess
(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATIONlpProcessInformation
);
- 参数
- lpApplicationName
指定可执行文件文件名 - lpCommandLline
命令行参数 - lpProcessAttributes
新进程安全属性 - lpThreadAttributes
线程是否被继承 - bInheritHandles
是否继承父进程句柄 - dwCreationFlag
设置子进程的线程调度的优先级 - lpEnvironment
指向一个新进程的环境块,默认为父进程环境 - lpCurrentDirectory
子进程的工作目录 - lpStartupInfo
决定子进程的主窗体如何显示的STARTUPINFO结构体 - lpProcessInformation
接收子进程的识别信息的PROCESS_INFORMATION结构体
最后
- 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!
下一篇: 百度地图的轨迹回放和实时监控