进程的基础

什么是进程?

进程是程序中的代码和数据,被加载到内存中运行的过程

进程的复刻(fork)知识点

1、父子进程的生成

父进程调用fork(),将当前进程一分为二,一个称为父进程,一个称为子进程,其中的相同点和不同点分别为:

父子进程哪些属性完全一样
    1、实际的UID和GID,以及有效UID和GID
    2、所有环境变量
    3、进程组ID和会话ID
    4、当前工作路径
    5、打开的文件
    6、信号响应函数
    7、整个内存空间

 父子进程不一样的
    1、进程号PID。PID的身份证号码,哪怕是父子也要区分
    2、进程锁
    3、挂起的信号

2、父子进程的判断(判断哪个是父进程,哪个是子进程)

父子进程是并发执行的,没有先后次序,若要控制次序,需要依赖于信号量、互斥锁、条件量等其他条件。fork()的返回值来确定是子进程还是父进程,如果返回值大于零,那么返回值就是子进程的PID,(进入父进程)并且可以通过getpid()函数来获取该进程的PID;如果返回值等于零,(进入子进程)可以通过getpid()函数获取该进程的PID,通过getppid()获取该进程的父进程的PID;

进程涉及的基本函数

1、进程的退出函数

    exit(0);会回收资源
    _Exit(0),_exit();立即退出,不会回收资源,(不会冲刷缓冲区)

2、进程的回收函数及用宏判别回收时的状态

1、回收函数

        wait(&status);等待所有子进程,并且可以接收子进程的退出信息,成功返回子进程的PID,失败返回-1;
        waitpid(PID,&status,options)等待指定PID,options 参数用于修改 waitpid() 的行为;

2、宏的判断

        WIFEXITED(status): 如果子进程正常结束,返回非零值。

        WEXITSTATUS(status): 如果 WIFEXITED 返回真,这个宏返回子进程的退出码(一个0到255之间的整数)。
       WIFSIGNALED(status): 如果子进程由于接收到一个未被捕获的信号而终止,返回非零值。
       WTERMSIG(status): 如果 WIFSIGNALED 返回真,这个宏返回导致子进程终止的信号的编号。
      WIFSTOPPED(status): 如果子进程当前处于停止状态(因为接收到一个信号),返回非零值。
      WSTOPSIG(status): 如果 WIFSTOPPED 返回真,这个宏返回导致子进程停止的信号的编号。

3、exec系列函数的使用(举例部分)

        execl("/bin/ls","ls","-l",NULL);//从左向右参数依次为:命令路径、命令、具体命令实现
        execlp("ls","ls","-l",NULL)://该函数与上述函数效果一样,只不过无需再手动找命令路径

        char *str[]={"ls","-l",NULL};  execv("ls",str);//该函数利用数组传参,跟execl相似

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值