Linux进程相关API及多进程间通信

一、相关API

1、进程的创建fork()
                    #include <unistd.h>
                    pid_t fork(void);
                    pid_t vfork(void);
                        返回值:    > 0       父进程 parent process
                                ==0       子进程 child process
                                < 0(-1)   失败
                        fork的特点:
                            第一个特点:    一次调用,两次返回,返回大于0(值就是子进程的id号)表示父进程,等于0表示子进程
                                        子进程会复制父进程的所有资源(代码段,数据段)
                            第二个特点:父进程总共分成三个部分
                                        第一个部分在fork之前
                                        第二个部分fork成功之后,在id>0情况下的那部分代码
                                        第三个部分fork后面的
                        总结:
                            第一点:fork()的套路
                                    if(>0){ 父进程代码 }else if(==0){ 程序员创建子进程需要并发执行的任务代码 }else{ 错误 }                    

                           第二点:vfork创建的子进程共享父进程的资源,vfork创建的子进程一定优先于父进程运行
2、进程的退出跟回收exit()/wait()
                    #include <stdlib.h>
                    void exit(int status); //退出进程的同时刷新缓冲区
                    void _exit(int status);//退出进程的时候不刷新缓冲区
                        参数:status -->进程退出时候的值
                        对比return:    区别一:return是C语言中关键字,exit()是函数
                                    区别二:return是返回函数调用的结果,exit()是结束整个进程
                    #include <sys/wait.h>
                    pid_t wait(int *stat_loc);--->收子进程结束返回值(收尸)
                        返回值:成功 返回值回收到的那个子进程的ID,失败 -1
                        参数:stat_loc -->用来存放进程退出时候的状态信息 
                                        不是存放退出值,退出值仅仅只是状态信息中的一部分
                        特点:会让父进程一直阻塞,直到成功回收到子进程为止          
                    pid_t waitpid(pid_t pid, int *stat_loc, int options);
                        返回值:成功 返回值回收到的那个子进程的ID,失败 -1
                        参数:    pid -->    小于-1   waitpid(-1200,&status,options);回收进程组id是1200的其中一个
                                        等于-1   waitpid(-1,&status,options);回收任意一个子进程(不要求同组)
                                        等于0    waitpid(0,&status,options); 回收本进程组中任意一个子进程
                                        大于0    waitpid(1200,&status,options); 指定回收id是1200的子进程
                                stat_loc -->跟wait一样
                                options -->WN0HANG  非阻塞等待,等得到就等,等不到就直接退出
                                            0        阻塞等待
3、获取当前进程的id以及父进程的id
                    #include <sys/types.h>
                    #include <unistd.h>
                    pid_t getpid(void);  //获取子进程ID
                    pid_t getppid(void); //获取父进程ID
                    gid_t getgid(void); //获取进程组ID
4、使用函数执行shell命令
                    #include <stdlib.h>
                    #include <unistd.h>
                    int system(const char *command);
                        返回值:失败 -1 
                        参数:    command -->你要执行的shell命令或者你要执行程序完整的命令名
                    int execl(const char *path, const char *arg, ...);
                        参数:    path -->你要执行的程序/命令所在的路径
                                arg

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值