linux学习之进程篇(一)

进程

1.PCB

  每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内的进程控制块是task_struct结构体。现在我们全面了解一下其中都有哪些信息。

  • 进程标示符(PID):描述本进程的唯一标示符,用来区别其他进程。父进程id(PPID)
  • 进程的状态,有运行、挂起、停止、僵尸等状态。
  • 进程切换时需要保存和恢复的一些CPU寄存器。
  • 描述虚拟地址空间的信息。
  • 描述控制终端的信息。
  • 当前工作目录
  • umask掩码
  • 文件描述符表,包含很多指向file结构体的指针
  • 和信号相关的信息
  • 用户id和组id
  • 控制终端、Session和进程组。
  • 进程可以使用的资源上限,用ulimit可以更改

2、虚拟地址

虚拟地址

在虚拟地址取内容时会映射到物理地址中取。0-3G是用户空间,3G-4G是内核空间。PCB是在kernel空间。只有操作系统的管理者才能看到所有的pcb。操作系统以页面为单位管理。每个页面可以设置R/W属性(常量区只有只读属性,所以写会出错)。通过系统调用能从用户态进入到内核态,通过软中断的手段。每个PCB里有一个指针指向文件描述符表。

3.进程的环境

  lib中定义的全局变量environ指向环境变量表,environ没有包含在任何头文件中,所以在使用时有用extern声明。

  由于父进程在调用fork创建子进程时会把自己的环境变量表也复制给子进程。按照惯例,环境变量字符串都是name=value这样的形式,大多数name由大写字母加下划线组成。

  获取和设置环境变量

 

 #include<stdlib.h>

 char *getenv(const char *name);

  

  getenv的返回值是指向value的指针,若未找到则为NULL

  

#include<stdlib.h>

int setenv(const char *name,const char *value,int rewrite);

void unsetenv(const char *name);

  putenv和setenv函数若成功则返回为0,若出错则返回非0。setenv将环境变量name的值设置为value。如果已存在环境变量name,那么若rewrite非0,在覆盖原来的定义;若rewrite为0,则不覆盖原来额定义,也不返回错误。unsetname删除name的定义,即使name没有定义也不返回错误。

4.进程的状态

进程的状态

  处理机现场保留在pcb的内核栈中,以便恢复执行。cpu的分时复用机制。

修改进程资源限制,软限制可改,最大值不能超过硬限制,硬限制只有root用户可以更改。

#include<sys/time.h>
#include<sys/resource.h>
int getrlimit(int resource,struct rlimit *rlim);int setrlimit(int resouce,const struct rlimit *rlim);

查看进程资源限制

cat /proc/self/limits

ulimit -a
时间: 2024-11-12 00:40:38

linux学习之进程篇(一)的相关文章

linux学习之进程篇(二)

进程原语 1.fork #include<unistd.h> pid_t fork(void); fork 子进程复制父进程,子进程和父进程的PID是不一样的,在克隆pcb时,pid没有复制,fork还有底层的函数,如creat(),clone(),retrun 返回.子进程执行的第一条语句是return. #include<stdio.h> #include<unistd.h> #include<stdlib.h> int main(void) { pid

linux学习之进程篇(三)

进程之间的通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进行之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷贝到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程之间通信(IPC) 进程间通信 1.pipe管道 可以用环形队列实现.队列满的话会阻塞.管道是一种最基本的IPC机制,由pipe函数创建 #include<unistd.h> int pipe(int filedes[2]); 管道作用于有血缘

linux学习之进程,线程和程序

                                                                                  程序.进程和线程的概念 1:程序和进程的差别 进程的出现最初是在UNIX下,用于表示多用户,多任务的操作系统环境下,应用程序在内存环境中基本执行单元的概念.进程是UNIX操作系统环境最基本的概念.是系统资源分配的最小单位.UNIX操作系统下的用户管理和资源分配等工作几乎都是操作系统通过对应用程序进程的控制实现的! 当使用c c++ j

Linux学习笔记——第一篇——Ubuntu安装与操作

笔者是Windows的使用者,由于Coding的需要以及在Linux下开发的方便,所以开始使用Linux. 当然笔者还是割舍不下Windows的,毕竟很多通讯工具等软件以及游戏在Linux下是没有发行的,所以笔者使用了虚拟机啊. 下面给出简单的安装过程. 1.下载虚拟机软件,笔者比较喜欢VMPlayer,因为它比较轻便且免费,并且很好的支持了拖拽复制功能(VM TOOL),当然也可以使用如VirtualBox.VPC等 链接:https://my.vmware.com/web/vmware/fr

Linux学习之进程管理(十九)

Linux学习之进程管理 进程查看 查看系统中所有进程,使用BSD操作系统的格式 语法:ps aux 选项: a:显示所有前台进程 x:显示所有后台进程 u:显示这个进程是由哪个用户产生的 语法:ps -le 查看系统中所有进程,使用Linux标准命令格式 选项 l:显示详细信息 e:显示所有进程 USER:该进程是由哪个用户产生的 PID:进程的ID号 %CPU:该进程占用CPU资源的百分比,占用越高,进程越消耗资源. %MEM:该进程占用物理内存的百分比,占用越高,进程越消耗资源. VSZ:

Linux学习之基础篇

一.Linux学习的必备条件: 1. 计算器概论不硬件相关知识: 2. 先从Linux癿安装不挃令学起: 3. Linux操作系统的基础技能:『使用者.群组癿概忛』.『权限癿观忛』,『程序的定义』等等: 4. 务必学会vi文书编辑器: 5. Shell不Shell Script癿学习: 6. 一定要会软件管理员:Tarball/RPM/DPKG 等软件管理员的安装方式,对你来说重要的不行了.(嵌入式设备,学术研究单位) 7. 网绚基础癿建立:IP概念,路由的概念等等:

linux学习笔记-前篇

大学毕业已经快三年了,从事嵌入式开发的工作也快三年了. 不过,老干些裸机开发,感觉很是枯燥,一咬牙一跺脚,决定从今天开始学习Linux操作系统,顺便记录下学习过程中所遇到的问题与心得. 自己从前完全没有接触过这方面的东西,完全是从一个纯粹的新人开始,也不知道有多少同志在和我走想同的路,总之,大家共勉吧! ---------------------分割线--------------------------------- 据江湖传言,Linux最先是由一个很牛的芬兰大学生搞出来的. 然后还充分发扬了

Linux学习笔记&mdash;&mdash;进程查看及管理

Linux进程查看和管理工具有很多 pstree命令:以树形方式显示进程 ps [OPTION]... 常用组合:aux u: 以用户为中心组织进程状态信息显示 a: 与终端相关的进程: x: 与终端无关的进程: 常用组合:-ef             -e: 显示所有进程              -f: 显示完整格式程序信息 常用组合:-eFH             -F: 显示完整格式的进程信息             -H: 以进程层级格式显示进程相关信息 常用组合:-eo, axo

Linux学习-1进程

在Linux中,在一个程序的内部启动另外一个程序,从而创建一个新进程. 1.这个工作可以通过库函数system来完成. #include<stdlib.h> int system (const char *string); system函数的作用是,运行以字符串参数形式的传递给他打命令并等待该命令完成.命令的执行情况就如同在shell中执行如下的命令: $ sh -c string 如果无法启动shell来运行这个命令,system函数将返回错误码127,其他错误返回-1. system.c