21xrx.com
2025-04-01 18:07:59 Tuesday
文章检索 我的文章 写文章
C++如何创建新进程?
2023-06-30 11:04:27 深夜i     17     0
C++ 创建 新进程

C++ 是一种面向对象编程语言,它提供了一些函数来创建新进程。在操作系统中,进程是执行的程序的实例。进程间通信是操作系统中很常见的一种行为,因此,了解如何在 C++ 中创建新进程是非常有用的。下面是创建新进程的一些方法。

1. fork() 函数

fork() 函数是 Unix 和类 Unix 操作系统中创建新进程的常用方法,它在 C++ 中也被支持。这个函数会在当前进程的地址空间中创建一个与之完全相同的副本,包括代码段、数据段、堆栈以及进程的上下文信息。在子进程中创建的新进程可以通过调用 exec() 函数来执行其他程序。以下是一个使用 fork() 函数来创建新进程的示例:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main() {
  pid_t pid;
  pid = fork(); // 创建新进程
  if (pid == 0) { // 子进程
    printf("I am the child process.\n");
  } else if (pid > 0) { // 父进程
    printf("I am the parent process. My child's pid is %d.\n", pid);
  } else { // 出错
    fprintf(stderr, "Fork failed.\n");
    exit(-1);
  }
  return 0;
}

2. CreateProcess() 函数

在 Windows 平台上,CreateProcess() 函数是用于创建新进程的主要方法。该函数接受多个参数,包括要执行的程序名称、命令行参数、进程安全信息等等。以下是一个使用 CreateProcess() 函数来创建新进程的示例:

#include <iostream>
#include <windows.h>
using namespace std;
int main() {
  STARTUPINFO info = {};
  PROCESS_INFORMATION processInfo = {};
  if (!CreateProcess("notepad.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo))
    cout << "CreateProcess failed." << endl;
    return -1;
  
  WaitForSingleObject(processInfo.hProcess, INFINITE); // 等待子进程结束
  CloseHandle(processInfo.hProcess); // 关闭进程句柄
  CloseHandle(processInfo.hThread); // 关闭线程句柄
  return 0;
}

3. popen() 函数

popen() 函数是另一种创建新进程的方法,它通过启动一个子进程,并打开一个管道来与子进程通信。该函数接受两个参数:要执行的命令和打开模式(“r” 表示只读,“w” 表示只写)。以下是一个使用 popen() 函数来创建新进程的示例:

#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
  FILE *fp;
  char buffer[1024];
  fp = popen("ls -l", "r"); // 执行命令并打开管道
  if (fp == NULL) {
    cout << "popen failed." << endl;
    exit(-1);
  }
  while (fgets(buffer, sizeof(buffer), fp) != NULL) // 从管道中读取输出
    cout << buffer;
  
  pclose(fp); // 关闭管道
  return 0;
}

总之,上述方法演示了在 C++ 中如何创建新进程。这些方法可以帮助开发人员编写更复杂的程序,例如使用多进程进行并行计算。同时,这些方法也可以用于创建不同类型的应用程序,例如命令行工具和图形界面程序。

  
  

评论区

请求出错了