1操作系统几大模块

  进程管理,进程调度,进程间通讯机制,内存管理,中断异常处理,文件系统,I/O系统,网网络部分。

2操作系统的目的

  管理硬件设备,为上层应用程序提供良好的执行环境。

3linux系统基本结构

进程描述PCB

广义上,所有的进程信息被放在一一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。linux 下该结构伪task_struct

其中包含的基本信息

标示符 : 描述本进程的唯一一标示示符,用用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执行行的下一一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文文数据:进程执行行时处理器的寄存器中的数据。
I/O状态信息:包括显示示的I/O请求,分配给进程的I/O设备和被进程使用用的文文件列表。
记账信息:可能包括处理器时间总和,使用用的时钟数总和,时间限制,记账号等

保存进程信息的数据结构叫做 task_struct,并且可以在 include/linux/sched.h 里里找到它。所有运行行在系统里里的进程都以 task_struct 链表的形式存在内核里里。
进程的信息可以通过 /proc 系统文文件夹查看。要获取PID为400的进程信息,你需要查看 /proc/400 这个文文件夹。大大多数进程信息同样可以使用用top和ps这些用用户级工具来获取。

获取进程标识符

进程位置(进程地址空间)

测试

关于环境变量的获取与修改

这里:setenv第三个参数为0时,如果环境变量存在,则不修改,直接返回。为非0 时,则如果存在,那么修改

进程状态

static const char * const task_state_array[] = {
"R (running)", /* 0 */
"S (sleeping)", /* 1 */
"D (disk sleep)", /* 2 */
"T (stopped)", /* 4 */
"t (tracing stop)", /* 8 */
"X (dead)", /* 16 */
"Z (zombie)", /* 32 */
};

其中的S 是可中断睡眠状态(interruptible sleep),可以被唤醒的,而D状态是不可终端睡眠(uninterruptible sleep),只有自己醒来或者关机动作终止睡眠。

僵死状态(Zombies)是一一个比比较特殊的状态。当进程退出并且父父进程(使用用wait()系统调
用用)没有读取到子子进程退出的返回代码时就会产生生僵死进程。僵死进程会以终止止状态保持
在进程表中,并且会一一直在等待父父进程读取退出状态代码。

进程状态之间基本切换规则

向进程发送信号改变状态

命令  kill,killall

kill  -l  获取具体的命令编号以及信息

具体用法请自行man kill

另外查看进程状态的几个命令是   ps    pstree    top

进程优先级

在ps 的列中有

PRI :代表这个进程可被执行行的优先级,其值越小小越早被执行

NI :代表这个进程的nice值。

PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行行的先后顺序,此值越小小进程的优先级别越高。

nice值了,其表示进程可被执行的优先级的修正数值。

PRI(new)=PRI(old)+nice

注: 这里的nice值是对于运行中程序优先级的修正,所以参考点都是pri的预设值。而非当前值。

进程执行

进程内存布局分为四个不同的段:
     •     文文本段,包含程序的源指令。
     •     数据段,包含了静态变量。
     •     堆,动态内存分区区域。
     •     栈,动态增长与收缩的段,保存本地变量。

僵尸进程:一个子进程在其父进程没有调用wait()或waitpid()的情况下退出。这个子进程就是僵尸进程。如果其父进程还存在而一直不调用wait,则该僵尸进程将无法回收,等到其父
进程退出后该进程将被init回收。

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。

进程终止止
进程终止止的方方式有8种,前5种为正常终止止,后三种为异常终止止:
1 从main函数返回;
2 调用用exit函数;
3 调用用_exit或_Exit;
4 最后一一个线程从启动例程返回;
5 最后一一个线程调用用pthread_exit;
6 调用用abort函数;
7 接到一一个信号并终止止;
8 最后一一个线程对取消请求做出响应。
(1)exit函数
#include <stdlib.h>
void exit( int status );
void _Exit( int status );
#include <unistd.h>
void _exit( int status );

exit()做相应的资源清理工作而后返回内核。其他两个直接返回内核。

exit()和return返回效果一样

2)atexit函数
#include <stdlib.h>
int atexit( void (*fun)( void ) );

用于注册程序结束时运行方法,类似与sethandler机制或者戏够函数机。

且,注册顺序与执行顺序相反。类似析构过程

linux进程概论的更多相关文章

  1. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

  2. 如何灵活运用Linux 进程资源监控和进程限制

    导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...

  3. TODO:Golang Linux进程退出说明

    TODO:Golang Linux进程退出说明 Golang使用os.Exit(code)进程退出导致当前程序退出并返回给定的状态代码.传统上,code代码为零表示成功退出,非零错误退出. sysca ...

  4. Linux进程管理子系统分析【转】

    本文转载自:http://blog.csdn.net/coding__madman/article/details/51298732 Linux进程管理: 进程与程序: 程序:存放在磁盘上的一系列代码 ...

  5. 12个Linux进程管理命令介绍(转)

    12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国  作者:Linux [字体:大 中 小]   执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...

  6. linux 进程管理相关内容

    简介 当我们运行程序时,Linux会为程序创建一个特殊的环境,该环境包含程序运行需要的所有资源,以保证程序能够独立运行,不受其他程序的干扰.这个特殊的环境就称为进程. 每个 Linux 命令都与系统中 ...

  7. Linux - 进程查看与管理

    标签(空格分隔): Linux 进程的静态查看 查看系统所有进程 ps -ef -- 输出来好乱,看不懂..: ps aux -- a表示所有与终端相关的进程,u表示所有以用户组织的进程状态的信息,x ...

  8. Linux进程关系

    Linux进程关系   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的进程相互之间有一定的关系.比如说,在Linux ...

  9. Linux进程基础

    Linux进程基础   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 计算机实际上可以做的事情实质上非常简单,比如计算两个数的和 ...

随机推荐

  1. java 中关于System.out.println()的问题

    Java 的输出知识 1.System.out.println()不能直接写在类中,例如: 因为在 Class A{ //成员变量 //构造方法 //普通方法 //内部类 } 如果硬是想使用Syste ...

  2. ubuntu16.04下安装pcl点云库

    安装依赖项 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get insta ...

  3. ArcGIS for Server的安装及站点中的集群配置 分类: ArcGIS for server 2015-07-18 14:14 16人阅读 评论(0) 收藏

       坚信并为之坚持是一切希望的原因. (不足之处,欢迎批评指正!) --------------------环境:Windows server2008R2虚拟机两台----------------- ...

  4. webrtc--stun-turn

    .WebRTC后台服务: 通话的房间服务器(Room Server) 房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台 ...

  5. python3.7.2 ssl版本过低导致pip无法使用的问题

    环境:系统是centos6.6,python:python3.7.2 问题:安装好python3.pip后,在通过pip install xx 安装模块时,发现无法安装的问题,提示版本太低,系统默认的 ...

  6. Myeclipse 2013 professional 破解

    破解前要先关闭Myeclipse2013 1.(1)输入usercode可以随便输入,(2)然后选择Myeclipse的版本,(3)点击systemid按钮 2.然后点击Tools菜单栏下的Rebui ...

  7. 【Loadrunner】如何通过loadrunner利用代理对手机端Web浏览器及APP进行录制?

    以下为作者操作并最终可以成功录制脚本并调试成功的方法实际操作中记录截图,都是干货哦~ 1.安装lr11补丁 百度网盘下载链接:https://pan.baidu.com/s/1TPoaAMYvi1cw ...

  8. 在SQL Server里如何进行数据页级别的恢复

    在SQL Server里如何进行页级别的恢复 关键词:数据页修复 在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你 ...

  9. mysql 数据操作 单表查询 查询排序: order by

    如果不指定排序 默认是按照id字段 从小到大排序的  升序 mysql> select * from employee; +----+------------+--------+-----+-- ...

  10. Callable 和Runnable

    1:Callable ,方法调用会有返回值. private void callableTest throws ExecutionException, InterruptedException { E ...