欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
);

  • 参数
  1. lpApplicationName
    指定可执行文件文件名
  2. lpCommandLline
    命令行参数
  3. lpProcessAttributes
    新进程安全属性
  4. lpThreadAttributes
    线程是否被继承
  5. bInheritHandles
    是否继承父进程句柄
  6. dwCreationFlag
    设置子进程的线程调度的优先级
  7. lpEnvironment
    指向一个新进程的环境块,默认为父进程环境
  8. lpCurrentDirectory
    子进程的工作目录
  9. lpStartupInfo
    决定子进程的主窗体如何显示的STARTUPINFO结构体
  10. lpProcessInformation
    接收子进程的识别信息的PROCESS_INFORMATION结构体

最后

  • 由于博主水平有限,不免有疏漏之处,欢迎读者随时批评指正,以免造成不必要的误解!