【IO】多进程编程函数汇总、用法、功能(fork、getpid、getppid、exit、_exit、wait、waitp)

目录

1、fork函数介绍

2、getpid函数介绍

3、getppid函数介绍

4、exit函数介绍

5、_exit函数介绍

6、wait函数介绍

7、waitpid函数介绍


1、fork函数介绍

函数原型:

pid_t fork(void);

例子:

#include<myhead.h>
int main(int argc, const char *argv[])
{
    pid_t  pid = -1;     //定义变量存储创建的进程的id号
    pid = fork();           //创建一个子进程
    //对pid进行判断
    if(pid > 0)
    {
        while(1)
        {
            printf("我是父进程\n");
            sleep(1);
        }
    }else if(pid == 0)
    {
        while(1)
        {
            printf("我是子进程\n");
            sleep(1);
        }
    }
    sleep(1);
    return 0;
}

功能:拷贝父进程得到子进程

返回值:成功时,父进程中返回子进程的pid号,子进程中返回0,失败返回-1并置位错误码


2、getpid函数介绍

函数原型:

pid_t getpid(void);

例子:

pid_t pid = fork();     //创建一个子进程
printf("我是父进程:pid = %d, 当前进程的id为:%d\n",pid, getpid());

功能:获取当前进程的进程号

返回值:当前进程的pid

3、getppid函数介绍

函数原型:

pid_t getppid(void);

例子:

pid_t pid = fork();     //创建一个子进程
printf("我是父进程:pid = %d,当前进程的父进程的id为:%d\n",pid,getppid());

功能:获取当前进程的父进程的pid号

返回值:当前进程父进程的pid


4、exit函数介绍

函数原型:

void exit(int status);

例子:

exit(EXIT_SUCCESS);         //exit(0);

功能:退出当前进程,并刷新当前进程打开的标准IO文件指针的缓冲区

返回值:无

5、_exit函数介绍

函数原型:

void exit(int status);

例子:

_exit(EXIT_SUCCESS);         //exit(0);

功能:退出当前进程,但是不刷新标准IO的缓冲区

返回值:无


6、wait函数介绍

函数原型:

 pid_t wait(int *wstatus);

例子:

wait(NULL);

功能:阻塞回收子进程的资源,如果没有进程退出,那么就阻塞等待

返回值:成功返回回收的子进程的pid,失败返回-1并置位错误码

7、waitpid函数介绍

函数原型:

pid_t waitpid(pid_t pid, int *wstatus, int options);

例子:

waitpid(-1, NULL, 0);       //阻塞回收
waitpid(-1, NULL, WNOHANG);       //非阻塞回收
/*
参数1:要回收的进程号
       >0:表示回收具体的某个进程
       =0:能够回收当前进程所在的进程组中的任意一个子进程
       =-1:回收任意一个子进程
       <-1: 回收别的进程组(进程组id为给定的pid的绝对值)中的任意一个子进程
参数2:子进程退出时的状态,一般不接收,直接填NULL即可
参数3:表示是否阻塞回收僵尸进程
                0:表示阻塞
                WNOHANG:表示非阻塞
*/

功能:既可以阻塞也可以非阻塞形式回收僵尸进程

返回值:成功返回回收的子进程的pid,失败返回-1并置位错误码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值