【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 父子进程 与 有名管道

Linux C 父子进程 与 有名管道
  • trb331617
  • trb331617
  • 2017年06月15日 18:44
  • 192

linux_c语言实现父子进程共享内存

具体代码实现部分: #include #include #include #include extern int etext,edata,end; int main(int argc,char *...
  • maizi_hsx
  • maizi_hsx
  • 2017年11月28日 14:11
  • 167

简单的,父子进程间的共享内存通信

#include #include #include #include #include #include #define BUFFER_SIZE 2048 int main() { ...
  • FunkyFrog821951259
  • FunkyFrog821951259
  • 2016年11月24日 21:26
  • 989

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

前面的共享内存也是
  • wu_123_456
  • wu_123_456
  • 2014年09月30日 09:31
  • 1473

fork()后父子进程间的变量共享情况

#include #include #include #include int golobal_a = 0; int main() { int local_a = 0; pthread...
  • panzhenjie
  • panzhenjie
  • 2013年08月19日 15:30
  • 3178

Linux中fork的使用(05)---父子进程共享文件描述符

环境:Vmware Workstation;CentOS-6.4-x86_64 说明: 1、父进程和子进程可以共享打开的文件描述符。 2、父子进程共享文件描述符的条件:在fork之前打开文件...
  • sinat_25457161
  • sinat_25457161
  • 2015年09月21日 07:50
  • 1267

linux 父子进程联系

由于linux是一个多用户的操作系统,在同一时间可能会有多个用户争夺系统资源,进程为了及时,及早的完成任务(得到系统资源)就创建了子进程来争夺系统资源。一旦子进程用fork()创建成功,父子进程就会一...
  • OracleJ
  • OracleJ
  • 2012年01月01日 16:53
  • 5633

Linux_父子进程与fork

进程标识 每个进程都有一个非负整数表示的唯一进程ID,如交换进程(即调度进程)ID为0,init进程ID为1,页守护进程ID为2; 函数fork 原型如下: fork函数被调用一次,但返回两次,两...
  • u010275850
  • u010275850
  • 2015年11月08日 16:59
  • 1718

父子进程的各种区别与联系

(一)程序中fork与I/O函数之间的关系:         write是不带缓冲 的,因为在fork之前调⽤用write,所以其数据只写到标准输出⼀一次。标准I/O是缓冲的,如果标准输出到终端设备,...
  • renchunlin66
  • renchunlin66
  • 2016年07月17日 13:01
  • 2139

有关Linux下父子进程之间的几个思考与结论

From: http://wzw19191.blog.163.com/blog/static/1311354702009926105428947/1 . 父进程可以利用wait()/ waitpid(...
  • garybrother
  • garybrother
  • 2010年06月27日 15:56
  • 1409
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Linux C/C++】 第05讲 父子进程
举报原因:
原因补充:

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