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. 安卓中通知(Notification)的基本使用方法

    1. 通知的使用场合 当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的 ...

  2. vs 开发常用快捷键

    alt+shift+enter    编辑区最大化ctrl+]        括号匹配 ctrl+j        强迫智能感知ctrl+shift+空格    强迫智能感知(参数) ctrl+k+d ...

  3. 通过html<map>标签给图片加链接

    前面我们有谈到了通过图片定位给一张图片添加多个链接,现在用另外一种方法来实现,用html<map>标签给图片加链接 <img src="/images/hlj.jpg&qu ...

  4. centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课

    centos  MySQL主从配置 ntsysv   chkconfig  setup命令  配置MySQL 主从 子shell  MySQL备份  kill命令  pid文件  discuz!论坛数 ...

  5. YOGA Tablet 2 1371f 触屏失效,无声卡,蓝牙键盘都无法使用的解决办法

    安装驱动! 下载地址 http://www.lenovocare.com.cn/Handler/Download.ashx?fileid=1234 安装后电源管理,声卡,触摸屏即可使用! 蓝牙键盘连接 ...

  6. ROS 命令学习记录

    #catkin_init_workspace //just get CMakeList.txt #catkin_make  //增加了信文件夹 build和devel #Catkin_creat_pk ...

  7. python16_day28【crm只读、权限、堡垒机】

    一.只读 二.万能权限 三.堡垒机

  8. python开发之路目录

    Python 目录 基础 python入门 python数据类型.字符编码.文件处理 python函数基础 python函数进阶 python装饰器函数 python装饰器函数 python递归函数 ...

  9. html 音频

    <!DOCTYPE html><meta charset="utf-8"><video src="movie.webm" cont ...

  10. 141. Linked List Cycle(判断链表是否有环)

    141. Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can you sol ...