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

原创 2017年01月09日 08:48:06

    进程和线程是服务器编程的常客,真正理解清楚并不是一件容易的事,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. 多进程与文件锁

                 

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

        

版权声明:本文为博主原创文章,未经博主允许不得转载。

linux c语言 重定向子进程的stdout(标准输出)

程序简介: 1.建立有名管道 2.在子進程里打开寫端,以及利用dup2()函數將stdout重定位到有名管道 3.跟着在子進程里使用execl()函數調用/bin/ls 4.在父進程里打開讀端,讀取...

linux下c/c++实例之四父检测子进程和信号处理

一、简介       Linux下fork创建子进程执行程序,而父进程检测子进程的执行过程并处理部分信号,当出现段错误生成core文件时被重新命名,以便能随时通过时间调试core。 二、详解 1...

Linux父子进程通信--管道及FIFO通信

本文是对前文的一个整理,使代码的编写更加高效以及移植的可重用性变高。      详细可见上文:http://blog.csdn.net/gubenpeiyuan/article/details/104...

C/C++:linux进程通信简单例子(管道)

#include #include #include #include #include int main(void) { int fd[2],nbytes; pid_t ...
  • zg260
  • zg260
  • 2014年06月26日 17:19
  • 687

linux C++ socketpair进行父子进程间通信

void begin_session(session_t *sess) { activate_oobinline(sess->ctrl_fd); /* int sockfds[2]; //...

c/c++ 获取时间, 精确到毫秒

1. 获取当前时间,可精确到秒(Windows) 2.精确到毫秒

Ubuntu15.04 删除/sbin/upstart与孤儿进程收养的问题

使用ubuntu 15.04的用户在fork进程后如果子进程成为孤儿进程那么就会发现一个问题,那就是收养孤儿进程的不是我们熟悉的PID为1的init,而是一个在/sbin的upstart。那么这个进程...

Linux C 父子进程 与 有名管道

Linux C 父子进程 与 有名管道

C/C++ 日常学习总结(第二十三篇)父子进程间通信——环境变量

前面的共享内存也是
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Linux C/C++】 第05讲 父子进程
举报原因:
原因补充:

(最多只允许输入30个字)