windows、linux创建子进程

转载 2012年03月31日 14:51:40

在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返回给子进程。

zz: Python subprocess创建子进程(Windows下打开新的CMD窗口)

zz from: http://www.cnblogs.com/oubo/archive/2011/10/10/2394593.html Python subprocess 创建子进...

windows下创建子进程

本文转载自http://dreamneverland.blog.163.com/blog/static/18359440720111028324647/ Task 1.1.  Step 1. On ...

windows 创建子进程

windows下想要创建一个子进程不如linux的fork函数来得方便,通过CreateProcess函数创建一个新的进程,函数的定义如下 BOOL CreateProcess(  LPCTST...
  • ciaos
  • ciaos
  • 2012年07月17日 15:49
  • 4180

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

(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下:   #include     pid_t fork(void);   我们需要理解的是,...

Linux内核0.11分析三之创建子进程

继main函数开启中断和将进程0从0特权级翻转至3特权级后 main函数就调用fork()函数创建子进程/main.c static inline _syscall0(int,fork)//内联函数 ...

LInux 子进程创建函数fork简介

一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,...

linux系统编程学习day2--fork()函数的使用和子进程的创建

fork()函数的使用和子进程的创建 今天就是关于进程学习应该算作最基础的一块了,学习了fork()函数的使用,然后理解了具体的进程运行的顺序还有子进程创建之后怎么让子进程进行工作,有点历史的一小步,...

Linux创建子进程的具体过程

黄志恒 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 这篇文章来分析Linux操作系统...

Linux子进程创建

最近在学操作系统,新学到了一些知识,记在下面。 以下是相关源代码:#include"sys/types.h" #include"sys/file.h" #include"unistd.h" #inc...

linux waitpid检测子进程是否退出

  • 2014年12月12日 10:42
  • 142KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows、linux创建子进程
举报原因:
原因补充:

(最多只允许输入30个字)