【Linux C/C++】 第05讲 父子进程

来源:互联网 发布:金海岸大酒店网络地图 编辑:程序博客网 时间:2024/05/01 12:51

    进程和线程是服务器编程的常客,真正理解清楚并不是一件容易的事,C/C++作为难学易用的代表,在服务器编程上表现的尤为明显,用之前需要理解这个东西的体系架构是怎样的,否则稍不注意就是一场灾难,然后末日来临。

    一、 什么是进程

             直观一点可以理解为一个 执行起来的程序

             所有进程属性采用结构体维护->树状结构体

                   ps 查看所有进程常见属性

                   top  查看系统进程执行状况

                   pstree 树形显示进程

                   kill 向进程发送信号

                       kill -s 信号 进程id

                       kill -l      显示进程能接收的所有信号

    二、创建进程

            进程有关的创建函数

               int system(const char* filename);

                  建立独立进程,拥有独立的代码空间,独立的内存空间

                  等待新的进程执行完毕,system才返回

               popen

               exec系列函数

               fork

                 pid_t fork();

                     创建进程


    三、理解进程

            1.父子进程的关系

                独立的两个进程

                pstree上面互为父子关系的两个进程节点

            2.问题:

               父进程先结束导致

                          -> 子进程就直接依托根进程init,成为孤儿进程,无任何危害

               子进程先结束导致

                          -> 子进程会成为僵尸进程,不占用内存,不占用CPU,但在进程树占用一个节点

                                造成进程名额的资源浪费,必须处理僵尸进程

            3.僵尸进程使用wait回收

            4.父进程如何知道子进程退出

                子进程结束通常会向父进程发送一个信号SIGCHLD(17)

            5.父进程处理子进程退出信号

                signal(int sig,void (*fun) (int));

                  向系统注册:只要sig信号发生,系统停止进程,并调用注册函数fun

                  当函数执行完毕,继续原来进程

            6.父子进程的资源访问

                6.1 内存资源

                   子进程克隆整个内存区域,但内存区域指向不同的物理空间

                   但内存独立,不能相互访问

                6.2 文件资源

                    两个进程之间,文件描述符指向的是同一个文件

            7. 多进程与文件锁

                 

    四、进程控制(后续更新...)

        

0 0
原创粉丝点击