Linux进程概述

Linux进程概述

1、基本概念

程序:存放在磁盘文件中的可执行文件。

进程:程序执行的实例。(process)

进程ID:每个Linux进程都一定有一个唯一的非负整数数字标识符,称为进程ID。

2、Linux进程分析

Linux系统是一个多进程的系统,进程间具有并行、互不干扰的特性。

Linux进程可以分为三段:代码段、数据段和堆栈段。

                    代码段:存放程序代码

                    数据段:存放静态变量、全局变量、常数以及动态数据分配空间(malloc函数取得的空间)

                    堆栈段:存放子程序返回地址、子程序的参数以及程序的局部变量。

在一个程序运行时,哪些变量存放在堆中,哪些变量存放在栈中?

例:init进程            进程ID:1

init进程绝对不会终止,它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程),但是它以超级用户特权运行。

获取进程标识:

Code:
  1. #include<sys/types.h>   
  2. #inclued<unistd.h>   
  3. pid_t getpid(void);                           返回:调用进程的进程ID   
  4. pid_t getppid(void);                         返回:调用进程的父进程ID   
  5. uid_t getuid(void);                           返回:调用进程的实际用户ID   
  6. uid_t geteuid(void);                         返回:调用进程的有效用户ID   
  7. gid_t getgid(void);                           返回:调用进程的实际组ID   
  8. gid_t getegid(void);                         返回:调用进程的有效组ID  

3、fork函数

表示由当前进程再生成一个进程出来。

Code:
  1. #include<sys/types.h>   
  2. #include<unistd.h>   
  3. pid_t fork(void);   
  4. 返回:两个值,大于零的为子进程的ID号,等于零则表示处于子进程中。  

由fork创建的新进程为子进程

子进程继承了父进程的所有地址空间:进程上下文、进程堆栈、内存信息、打开的文件描述符、信号控制设置、进程优先级、进程组号、当前工作目录、根目录、资源限制、控制终端等。

父、子进程间的区别:

 ①fork函数的返回值;

 ②不同的进程ID;

 ③子进程的tms_utime,tms_stime,tms_cutime以及tms_ustime设置为0;

 ④父进程设置为锁,子进程不继承;

 ⑤父进程中的未决告警,子进程不继承;

 ⑥子进程的未决信号集设置为空集。

4、vfork函数

嵌入式系统硬件空间有限。故现在很多实现并不做父进程数据段和堆的完全拷贝,而是使用写进复制(cope_on_write,COW)技术。区域由父、子进程共享,而且内核它们存取许可权改为只读。若有进程试图修改这些区域,则内核为相关部分做拷贝。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值