21xrx.com
2024-11-22 06:28:09 Friday
登录
文章检索 我的文章 写文章
C++如何创建多个进程?
2023-07-08 16:05:00 深夜i     --     --
C++ 进程 创建 多个 fork()函数

C++可以通过多种方式创建多个进程,包括fork()、system()、CreateProcess()等方法。

1. 使用fork()函数创建多个进程

fork()是Unix/Linux系统中用来创建子进程的函数,它将创建一个新的进程,该进程是调用fork()函数的进程的副本。在子进程中可以使用exec()函数来执行另一个程序,而在父进程中可以继续执行原来的程序。

示例代码:


#include <iostream>

#include <unistd.h>

using namespace std;

int main(){

  pid_t pid=fork(); //创建子进程

  if(pid<0) //如果创建子进程失败

    cout<<"Error: fork() failed"<<endl;

  else if(pid==0) //如果是在子进程中

    cout<<"I am child process"<<endl;

  else //如果是在父进程中

    cout<<"I am parent process"<<endl;

  return 0;

}

输出结果:


I am parent process

I am child process

2. 使用system()函数创建多个进程

system()函数调用外部命令,它会启动一个新的进程来执行指定的命令,命令执行完后返回到原来的进程。system()函数在调用过程中会使程序阻塞,直到命令执行完毕。

示例代码:


#include <iostream>

#include <stdlib.h>

using namespace std;

int main(){

  for(int i=0;i<3;i++)

    system("firefox &"); //执行多个命令,每个命令之间使用分号隔开

  return 0;

}

上面的代码可以在Linux系统中打开3个Firefox浏览器窗口。

3. 使用CreateProcess()函数创建多个进程

CreateProcess()函数是Windows系统中用来创建新进程的函数,它可以指定进程的启动参数、进程优先级等信息。可以通过不同的参数组合来创建多个进程。

示例代码:


#include <iostream>

#include <windows.h>

using namespace std;

int main(){

  STARTUPINFO si;

  PROCESS_INFORMATION pi;

  ZeroMemory(&si,sizeof(si));

  si.cb=sizeof(si);

  ZeroMemory(&pi,sizeof(pi));

  //创建3个进程

  for(int i=0;i<3;i++){

    //设置进程参数

    if(!CreateProcess(NULL,"notepad.exe",NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){

      cout<<"Error: CreateProcess() failed"<<endl;

      return -1;

    }

  }

  //等待进程结束

  WaitForSingleObject(pi.hProcess,INFINITE);

  //关闭句柄

  CloseHandle(pi.hProcess);

  CloseHandle(pi.hThread);

  return 0;

}

上面的代码可以在Windows系统中创建3个记事本程序。

通过上述方法,可以在C++中创建多个进程来完成不同的任务,进程之间可以并行运行,提高系统的性能和效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复