linux进程

进程
    进程的概念
        进程是一个程序执行的过程,会分配内存资源,cpu的调度
    进程的状态
        linux中分为 就绪态 运行态  睡眠态  暂停态 僵尸态
        运行态包括用户运行态,内核运行态,睡眠包括可中断睡眠和不可中断睡眠
    linux进程的查看
        ps aux
    进程和程序的区别
    
    进程共享
        0-3G 读时共享,写时复制
        共享问价描述符  mmap建立的映射区
    进程的分类
        交互式进程
        批处理进程
        守护进程
    进程的作用
        完成并发任务
    进程的调度
        由内核调度,完成cpu的切换
    进程的杀死
        kill
    僵尸进程
        由父进程回收子进程pcb块,要不会占用大量资源
    孤儿进程
        会由1号进程接收,可用于创建守护进程
    进程的退出
        正常退出
            exit _exit return
            exit 与 _exit 的区别
                exit会刷新io缓存  调用atexit注册的函数
                关闭文件,而_exit只会关闭文件
                atexit可以注册终止处理函数,终止处理程序的调用与注册顺序相反
            return 和 exit的区别
                return 是语言级别,表示了调用堆栈的返回  ,exit表示退出进程
                在主函数中 return n 和 exit n相同  0表示正常退出
                非0表示非正常退出
        异常退出
            两种 调用abort
            由信号终止
    进程空间的回收
        子进程结束后由父进程回收子进程的pcb块
            pid_t wait(int *status)
                阻塞式 等待任意进程退出
                通过status可以判断出是exit退出还是通过信号退出,并拿到退出的状态值
                
                相关带参宏
                    exit退出
                        WIFEXITED(wstatus)  //判断
                        WEXITSTATUS(wstatus) //获取值
                    signal退出
                        WIFSIGNALED(wstatus)  //判断
                        WTERMSIG(wstatus)   // 获取值
                返回值 :
            waitpid
                pid_t waitpid(pid_t pid, int *wstatus, int options);

                作用:wait的加强,通过阻塞或非阻塞的方式回收子进程
                
                参数:
                    pid:
                        <-1  回收指定进程组
                        -1   回收任意子进程
                        0    回收组内任意子进程
                        >0     通过子进程pid回收

                    wstatus 同wait
                    
                    options
                            0 表示阻塞等待
                            WNOHANG 表示非阻塞
                返回值
                    0 指定进程没有结束
                    -1 失败
                    回收成功返回收到的pid
                    
    相关函数
        进程的创建  fork
        获取 pid  ppid  getpid getppid
        子进程的回收  wait waitpid
exec族
    
    作用:
        用于在子进程中执行其他程序
        当进程调用exec族函数时,该进程完全被新程序替代,exec并不创建新进程,但是system会创建
    相关函数:
        int execl(const char *path, const char *arg, ...);
        int execlp(const char *file, const char *arg, ...);
        int execle(const char *path, const char *arg,..., char * const envp[]);
        int execv(const char *path, char *const argv[]);
        int execvp(const char *file, char *const argv[]);
        int execvpe(const char *file, char *const argv[],char *const envp[]);

        参数:
            path: 路径名 不写路径则表示当前路径
            file: 程序名
            argv: 表示用数组传递所有参数,其中最后一个参数值为NULL
        注意事项:
            调用该族函数后,该进程被完全替换,但是存在调用失败的情况,所以通常在
            调用后还要进行相应判断处理
守护进程
    特征: 脱离终端 后台长期执行

    相关概念:
        前台进程:
        后台进程

        session会话:当登录linux系统时即开启了一次会话,并被分配到一个终端,会话id为该会话首id.
        控制终端:
            终端与伪终端
                终端即 tty1 tty2 ....tty7 ,用户界面一般为tty1
                用户界面的终端控制器为伪终端。
            每个会话可以有一个控制终端,但不是所有会话都拥有终端。
        进程组:
            当一个程序在执行时会产生一个进程组,首进程id为进程组id, 如 ps aux |
            grep a.out,即开启了两个进程组。
    
    守护进程的创建:
        1.创建孤儿进程
            即需要创建一个后台进程,在形式上脱离终端控制,前台交互进程受到终端的限制,
            并且进程组组长不能用于创建新的会话。
        2.在子进程中调用setsid
            即让该子进程成为一个新的会话的会话id,并成为新的进程组组长。
        3.修改子进程工作路径
            chdir("/");  
            因为子进程继承了父进程的工作路径,但是守护进程通常执行一些系统任务,所以将
            工作路径切换到根目录。
        4.调用umsak函数,设置进程的文件权限掩码为0
            目的:增强守护进程的灵活性,可以创建出任意权限文件。
        5.在子进程中关闭不需要的文件描述符
            由于子进程继承了父进程的打开了的文件,而子进程用不到这些序偶一需要关闭

            关闭 文件描述符 0 - 1023
    守护进程的验证:
        
        
    守护进程的退出:
        通过kill发送信号退出守护进程

    注意事项:
        通常需要root权限运行

拓展
    linux内核的五大组成部分
        内存管理:
        进程管理:
        进程间通信:
        虚拟文件系统:
        网络接口
    推荐阅读:https://blog.csdn.net/xiezhi123456/article/details/80250100

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值