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. mysql添加federated引擎实现dblink远程表访问

    查看mysql数据库federated引擎是否开启. show engines; 若没有开启federated则在mysql配置文件my.cnf中mysqld中添加federated. 在远程数据库中 ...

  2. pta 习题集5-18 打印学生选课清单

    假设全校有最多40000名学生和最多2500门课程.现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单. 输入格式: 输入的第一行是两个正整数:N(≤≤40000),为前来查询课表的学生 ...

  3. poj3171 Cleaning Shifts【线段树(单点修改区间查询)】【DP】

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4422   Accepted: 1482 D ...

  4. type="submit"

    <?php var_dump($_REQUEST); ?> <form action="" id="javascript_page"> ...

  5. os模块os.walk() 方法和os.path.join()的简单使用

    os.walk:   http://www.runoob.com/python/os-walk.html os.path.join:   https://blog.csdn.net/zmdzbzbhs ...

  6. wsdl客户端代码生成的方法

    在jdk的bin目录下有一个wsimport.exe的工具,使用该工具命令生产java客户端代码: 命令如下: wsimport  -keep -d d:\ -s d:\src -p com.map  ...

  7. MySQL慢查询日志工具mysqlsla

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  8. Wormholes---poj3259(最短路 spfa 判断负环 模板)

    题目链接:http://poj.org/problem?id=3259 题意是问是否能通过虫洞回到过去: 虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts. 我们把虫洞看成是一条负权路,问 ...

  9. Python开发【数据结构】:基础

    数据结构 什么是数据结构? 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中. 比如:列表.集合与字典等都是一种数据结构 N.Wirth: “程序=数据结构+算法” 列表 列表:在其他编程 ...

  10. Day01 html详解

      day01 html详解   1.html的简介     1.1 什么是html?         - HyperText Markup Language:超文本标记语言,网页语言         ...