linux启动新进程运行二进制文件

Linux下使用exec函数族避免僵尸进程
本文介绍如何在Linux系统中利用exec函数族执行二进制文件,并通过连续创建子进程的方法来规避僵尸进程的产生。文章详细展示了通过vfork()和execl()函数实现新进程的创建及二进制文件的执行过程。

在linux系统中,我们有时需要通过在程序中启动其他二进制文件,使其运行在独立的进程当中。我们可以通过exec函数族来进行新的文件的执行。在这个过程中,我们需要注意僵尸进程的出现。避免僵尸进程可以有多种方法,例如通过信号,或者连续开启2个进程等等。我们此处通过连续创建子进程来规避僵尸进程的问题。

通过新进程运行二进制文件

#include <stdio.h>
#include <unistd.h>

#define OK 0UL
#define ERR 1UL

ULONG create_new_process(char *file_path, char *file_name){
    int status = 0;
    if(file_path == NULL || file_name == NULL)
        return ERR;
    pid_t pid;
    pid = vfork();
    
    if(pid < 0){
        return ERR;
    }
    else if(pid == 0){
        pid = vfork();
        if(pid < 0)
            _exit(1);
        if(pid == 0){
            if(execl(file_path, file_name, (char*) 0) == -1){
                printf("start the %s failed \r\n", file_path);
                _exit(1);
            }
            printf("start the %s success \r\n",file_path);
            _exit(0);
        }
        sleep(2);
        if(waitpid(pid, &status, WNOHANG) != pid){
            _exit(0);
        }else{
            if(WIFEXITED(status)){
                if(WEXITSTATUS(status) == 0){
                    _exit(0);
                }else{
                    _exit(1);
                }
            }
            _exit(1);
        }
    }
    if(waitpid(pid, &status, 0) != pid){
            pirntf("wiatpid error %d \r\n", pid);
            return ERR;    
    }
    if(WIFEXITED(status)){
        if(WEXITSTATUS(status) == 0)
            return OK;
    }
    return ERR;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值