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

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

发布时间:2012-04-11 18:25:51来源:红联作者:quietjolt

我目前的需求的是在linux中编写一个类似Windows CreateProcess函数的自定义函数,功能需求有以下几点

1.程序执行完成之后立即返回,不需要返回创建的程序的执行结果,而是需要返回子程序是否 fork 成功

2.子进程执行完成后自动退出,不需要形成僵尸进程等待父进程回收

3.子进程不继承父进程的任何资源(文件描述符...)

我目前的实现是 fork() + exec() + waitpid(pid,&status,WNOHANG | WUNTRACED) 遇到以下几个问题:

1.父进程无法获取子进程exec是否执行成功

2.有的时候还会出现僵尸进程

3.子进程会继承父进程打开的文件描述符(请教如何使用 clone 解决此问题)

请教我应该怎么修改才能达到我的要求?

或者那个库里面有类似的实现,我可以研究一下

代码:[code]//本函数执行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;

}

[/code]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值