windows、linux创建子进程

在windows下创建子进程较常用到的API就是CreateProcess,可以通过以下的方式启动一个新进程:

STARTUPINFO si = {0};             
    PROCESS_INFORMATION pi = {0}; 
    si.cb = sizeof(STARTUPINFO);         //结构体大小
    GetStartupInfo(&si);                       //初始化结构
    si.wShowWindow = SW_HIDE;         //新进程不显示窗口
    si.dwFlags = STARTF_USESHOWWINDOW;  //令si.wShowWindow生效
    //关键步骤,CreateProcess函数参数意义请查阅MSDN 
    if (!CreateProcess( NULL,            //可执行文件名,为NULL时,通过szCmdLine提供
                               szCmdLine,     //命令行参数
                               NULL,             //指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。
                                                     //如果lpProcessAttributes参数为空(NULL),那么句柄不能被继承。 
                               NULL,             //指向一个SECURITY_ATTRIBUTES结构体,这个结构体决定是否返回的句柄可以被子进程继承。
                                                     //如果lpThreadAttributes参数为空(NULL),那么句柄不能被继承。 
                              FALSE,         //指示新进程是否从调用进程处继承了句柄
                              NULL,          //指定附加的、用来控制优先类和进程的创建的标志
                              NULL,          //指向一个新进程的环境块。如果此参数为空,新进程使用调用进程的环境
                              NULL,          //子进程的工作路径,当进程名为相对路径时,必须填写
                                &si,           //指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结构体
                               &pi))          //指向一个用来接收新进程信息的PROCESS_INFORMATION结构体
    { 
        return false;
    }

WaitForSingleObject(pi.hProcess,INFINITE);   //等待子进程结束
    CloseHandle(pi.hThread);                             //关闭新进程的主线程
    CloseHandle(pi.hProcess);                            //关闭新进程

在linux下创建子进程:

pid_t pid;
    if(( pid = fork()) == -1 )                                                 //创建子进程
    {
        exit(0);                                                                      //创建进程失败,退出程序
    } else if(pid == 0) {                                                        //子进程空间

char *args[]={FileMonitor, "-fp", lmonitorList[num].lm_strDirectory,  NULL};
        if(execve(FileMonitor, args, NULL)< 0) {                        //在子进程中调用FileMonitor进程

printf("execve ./wisFileMonitor -fp %s failed in the child process!/n", lmonitorList[num].lm_strDirectory);
            CREATE_THREAD(StartMonitorThread, (THREAD_PARAM) num); 
        }
    } else {                                                                         //父进程空间
        lmonitorList[num].lm_pid = pid;
        lmonitorList[num].lm_bstop=false;
    }

如果在创建子进程时,没有出现任何错误,fork函数将返回两次,一次在父进程中,另一次在子进程中。fork函数将新创建的子进程ID返回给父进程,并将0返回给子进程。

时间: 2024-10-10 23:23:43

windows、linux创建子进程的相关文章

Linux创建子进程的函数说明

1. fork函数,创建一个子进程 pid_t fork(void); //pid_t就是一个整形类型 返回值: 成功的情况下,父进程返回子进程的id(非负整数),子进程返回0: 失败的情况,父进程返回-1,创建子进程失败,也就是没有创建子进程. 举例说明: int main(int argc,char* argv[]) { pid_t pid; pid = fork(); //创建一个子进程,从这段代码开始(包括这段代码)往后,就有两个进程在执行了, //但是,哪个进程先执行不确定,看哪个进程

linux创建子进程--fork()方法

(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下: #include <unistd.h> pid_t fork(void); 我们需要理解的是,调用一次fork()方法,该方法会返回两次.一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID.一次是在子进程中返回,返回值是0,代表当前进程为子进程.如果返回值为-1的话,则代表在派生新进程的过程中出错. 那么在程序中,我们就可以根据此返回值来判断当前进程是父进程还是子进程

【操作系统】linux创建子进程--fork()方法

(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下: [cpp] view plaincopy #include <unistd.h> pid_t fork(void); 我们需要理解的是,调用一次fork()方法,该方法会返回两次.一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID.一次是在子进程中返回,返回值是0,代表当前进程为子进程.如果返回值为-1的话,则代表在派生新进程的过程中出错. 那么在程序中,我们就可以根

【cocos2d-x学习笔记】Windows下创建项目&amp;Linux环境搭建&amp;安卓环境搭建

一.windows下创建新项目 打开CMD将路径设置到cocos软件下的tools下的project-creator下,执行命令:create_project.py -project HelloWorld -package com.zsc.HelloWorld -language cpp 二.Linux环境搭建(QT配置) 1. 安装linux系统,ubuntu 14.04 64位 2. 安装支持软件 第1步:sudo apt-get update(运行此命令) 第2步:sudo apt-get

使用Active Database Duplication创建跨平台Data Guard设置 (Windows/Linux) (Doc ID 881421.1)

Using Active Database Duplication to Create Cross Platform Data Guard Setup (Windows/Linux) (Doc ID 881421.1) APPLIES TO: Oracle Database Cloud Exadata Service - Version N/A and laterOracle Database Cloud Service - Version N/A and laterOracle Databas

Windows+Linux安装Python工具setuptools

Windows+Linux安装Python工具setuptools setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutilsde工具的增强工具(适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本),可以让程序员更方便的创建和发布 Python 包,特别是那些对其它包具有依赖性的状况. 经常接触Python可能会注意到,当需要安装第三方pytho

Linux (Windows Linux子系统)

Linux (Windows Linux子系统) 如果想体验Linux环境下开发和运行.NET Core应用,我们有多种选择.一种就是在一台物理机上安装原生的Linux,我们可以根据自身的喜好选择某种Linux Distribution,目前来说像RHEL.Ubuntu.Debian.Fedora.CentOS和SUSE这些主流的Distribution都是支持的.如果读者朋友们觉得这种方式比较麻烦,我们也可以采用虚拟机的形式安装相应的Linux Distribution,比如我经常使用的都是安

linux创建进程fork的方法步骤

fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有任何形式参数 父进程与子进程 1.掌握概念,什么是父进程,什么是子进程 除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的.创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程. 2.fork函数不需要任何参数,对于返回值有三种情况 1)对于父进程,fork函数返

php linux 创建文件夹权限问题

$path = "DataMsg/"; if(is_dir($path)==false){ @mkdir($path,0777); } windows 上创建没问题.但在linux上创建不了. 慢慢排查发现是自己的上层目录没有权限导致.chmod 上层目录 777.OK 问题解决了