进程相关函数

本文详细讲解了C/C++中的子进程创建函数fork(),如何通过getpid()和getppid()获取进程号,以及结束进程的exit()和_wait()函数。此外,介绍了守护进程的创建步骤和exec函数族(execl、execlp、execv、execvp)的作用与用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建子进程函数----fork( )

pid_t fork(void);
//pid_t:子进程号

        创建形式一般为:

int main()
{
    pid_t pid;
    pid = fork();
    //其中返回pid<0,则子进程创建失败。
    if(pid == 0)
    {
        //子进程代码;
    }
    else
    {
        //父进程代码;
    }
}

        另外在进程中可以用函数返回进程号:

pid_t getpid(void) ;//返回当前执行进程的pid
pid_t getppid(void);//返回当前执行进程的父进程的pid

结束当前进程---- exit( ) / _exit( )

void exit(int status);
//等价于main中的return xxx;会刷新缓冲区
void _exit(int status);
//区别: exit会在结束进程,把所有文件的媛冲区刷新,
//     _exit结束就是直接结束,不会刷新缓冲区

等待进程函数----wait( ) / waitpid( )

pid_t wait(int owstatus);
//等待任意进程结束,然后回收该进程的资源
pid_t waitpid(pid_t pid,int *wstatus, int options);
//等待任意/指定的某个子进程
//参数1:进程号
//参数2:进程结束时的状态存储的地址
//参数3:选项
         WNOHANG    //非阻塞等待,执行到这个函数时,有进程结束就回收,没有就结束函数,继续执行该语句之下的代码
         0          //阻塞等待,一直等待某个进程结束

守护进程

        

/*创建步骤:
 1.创建子进程,父进程退出
 2.在子进程中创建新会话,子进程变为会话组组长
 3.修改进程工作路径
 4.修改文件权限隐码
 5.关闭文件描述符
*/
int main()
{
   
    if(fork() > 0) exit(0); //1.创建子进程,父进程退出
   
    pid_t pid = setsid(); //2.在子进程中创建新会话,子进程变为会话组组长
   
    chdir("/home/ubuntu"); //3.修改进程工作路径
  
    umask(0);  //4.修改文件权限隐码

    //5.关闭文件描述符
    int fds = getdtablesize();
    for(int i = 0;i < fds;i++)
    {
        close(i);
    }
    
    //守护进程执行的内容
    
}

主函数main

int main(int argc,char * argv[])
//参数:argc:存储命令行参数个数
//参数:argv:存储每个命令行参数字符串的首地址

exec函数族

        exec函数族:就是把当前进程执行的代码,替换成其他程序代码,在当前进程中就执行新程序的代码内容

        execl( )

int execl(const char *pathname,const char arg,/* (char t) NULL*/);
//参数1:程序的路径名
//参数2:程序名以及给程序的参数

        execlp( )

int execlp(const char *file,const char targ, .../* (char *] NULL */)
//参数:程序名以及程序的路经
//这个函数已经指定了一个路径,所以不需要程序的路径名

        execv( )

int execv(const char *pathname, char *const argv[]);
//参数1:程序的路径名
//参数2:程序名以及给程序的参数,参数存在一个指针数组中

        execvp( )

int execvp(char *const argv[])
//参数:程序名以及给程序的参数,参数存在一个指针数组中

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值