如何在linux中编写一个类似CreateProcess的函数

 我来答
阿尔迈凡
2015-12-27 · TA获得超过8460个赞
知道大有可为答主
回答量:5744
采纳率:14%
帮助的人:1955万
展开全部

CreateProcess函数可以创建一个新的进程并调用一个外部程序

并且它有很多参数可以设置新的进程相关的状态

如果只要想简单地完成创建一个进程并调用一个外部程序的话

在linux上可以使用fork或者clone来进行创建进程

然后使用exec族函数来调用一个外部程序

一个简单的实现大概是这样的

int create_procress(const char *path,const char *name,const char *arg)
{
    pid_t pid;

    pid=fork();
    if(pid == 0)
    {
        if(execl(path,name,arg,NULL) == -1)
        {
            perror(path);
            _exit(-1);
        }
    }
    else if(pid == -1)
        return -1;

    return 0;
}

参数path为执行外部程序的路径

name为运行程序的名称(argv[0])

arg为命令行参数(从argv[1]开始)


如果对新进程有其它需求的话比如设置环境变量等可以使用execle等进行扩展

或者其它的要求也可以使用linux提供的相应api在fork后进行设置

匿名用户
2015-02-01
展开全部
//本函数执行exepath指定的程序
//执行成功和失败无法返回
int execute_new(const char *exepath,const char *arg,unsigned int &retpid)
{
if(exepath == NULL)
{
return 0;
}

int argcount=0;
char *argv[1024]={0};
char argsave[1024]={0};
char *argline = argsave;
argv[0] = (char *)exepath;
argcount++;

////////////分割和提取参数,作为execvp函数的参数
if(arg != NULL)
{
strncpy(argsave,arg,1024-1);
int is_find_space = -1; //-1,
if(*argline != ' ')
{
argv[argcount] = (char *)argline;
argcount++;
}
while(*argline != '\0')
{
if(*argline == ' ' && *(argline+1) != ' ' && *(argline+1) != '\0')
{
argv[argcount] = (char *)(argline+1);
argcount++;
}
if(*argline == ' ')
{
*argline='\0';
}
argline++;
}
}

pid_t pid;
int status;
if((pid = fork())<0){
status = -1;
}
else if(pid == 0){
execv(exepath,argv);
_exit(127); //子进程正常执行则不会执行此语句
}
else{

retpid = pid;

waitpid(pid, &status, WNOHANG|WUNTRACED);

}
return status;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西穆山人
2015-12-06 · 超过58用户采纳过TA的回答
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:56.5万
展开全部
如下,使用 fork 和exec 两步
int pid = fork();
if( pid == 0 ){
exec(子进程文件)
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式