1. 引言

一个程序是存储在文件中的机器指令序列。一般它是由编译器将源代码编译成二进制格式的代码。运行一个程序意味着将这个机器指令序列载入内存然后让处理器(cpu)逐条执行这些指令。

在Unix术语中,一个可执行程序是一个机器指令及其数据的序列。一个进程是程序运行时的内存空间和设置。

数据和程序存储在磁盘文件中,程序在进程中运行。

2. ps

进程存在于用户空间。用户空间是存放运行的程序和它们的数据的一部分内存空间。

使用ps(process status)命令可以查看用户空间的内容。这个命令会列出当前的进程。

用户空间容纳进程

ps
ps -a
ps -l

文件系统容纳文件和目录

ls
ls -a
ls -l

ps

 PID TTY          TIME CMD
2658 pts/0 00:00:00 bash
2954 pts/0 00:00:00 ps

这个有两个进程在运行:bash(shell)和ps命令。每个进程都有一个可以唯一标识它的数字,被称为进程ID。一般简称为PID。每一个进程都与一个终端相连,这里是/dev/pts/0。每个进程都有一个已运行的时间。注意ps对已运行时间统计并不是非常的精确,从ps只用了0秒就可以看出。

ps -a

ps有很多可选项。和ls命令一样,ps支持-a可选项。-a选项列出所有进程,包括在其他终端由其他用户运行的程序。但是带选项-a的输出并不包括shell。ps也有一个-l选项来打印更多细节:

ps -l

[purple@localhost 0820]$ ps -la
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 R 500 3002 2658 0 80 0 - 1170 - pts/0 00:00:00 ps

名为S的一列表示各个进程的状态。S列的值为R说明ps对应的进程正在运行。如果有其他进程的S列的值为S,说明它们都处于睡眠状态。每个进程都属于相应地UID列指明的用户ID。每个进程都有一个进程ID(PID),同时也有一个父进程ID(PPID)。

标记为PRI和NI的列分别是进程的优先级和niceness级别,内核根据这些值来决定什么时候运行进程。一个进程可以增加niceness级别,这就像在超市排队付账的时候,让其他客户排到自己的前面。超级用户可以减少它的niceness级别,这就像排队的时候插队。

一个进程有大小,这由SZ列表示。这列的数据表示这个进程占用的内存大小。

WCHAN列显示进程睡眠的原因。

ADDR和F已经不在使用,但是为了兼容的原因而保留它们。

ps –fa

[purple@localhost 0820]$ ps -fa
UID PID PPID C STIME TTY TIME CMD
purple 3095 2658 0 20:40 pts/0 00:00:00 ps -fa

-f表示格式化输出,这样便于阅读。用用户名代替UID来显示。在CMD列显示完整的命令行

3. 进程

建立一个进程有点像建立一个磁盘文件。内核要找到一些用来存放程序指令和数据的空闲内存页。内核还要建立数据结构来存放相应的内存分配情况和进程属性。

是操作系统变得神奇的不仅是它的文件系统把一堆旋转圆盘上连续的簇变成有序组织的树状目录结构,并且以相似的机制,它的进程系统将硅片上的一些位组织成一个进程社会。

4. shell

shell是一个管理进程和运行程序的程序。所有常用的shell都有三个主要的功能:

1. 运行程序

grep、date、ls、echo和mail都是一些普通的程序,用c编写,并被编译成机器语言。shell将它们载入内存并运行它们。很多人把shell看成是一个程序启动器(program launcher)。

2. 管理输入和输出

shell不仅仅是运行程序。使用<、>和|符号可以将输入、输出重定向。这样就可以告诉shell将进程的输入和输出连接到一个文件或是其他的进程。

3. 可编程

5. shell如何运行程序

一个shell 的主循环执行下面的4步:

1. 用户键入a.out

2. shell建立一个新的进程来运行这个程序

3. shell将程序从磁盘载入

4. 程序在它的进程中运行直到结束

因此为了要写一个shell,需要学会

1. 运行一个程序

2. 建立一个进程

3. 等待exit()

LINUX进程控制的更多相关文章

  1. Linux进程控制(二)

    1. 进程的创建 Linux下有四类创建子进程的函数:system(),fork(),exec*(),popen() 1.1. system函数 原型: #include <stdlib.h&g ...

  2. Linux进程控制(一)

    1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度 ...

  3. Linux - 进程控制 代码(C)

    进程控制 代码(C) 本文地址:http://blog.csdn.net/caroline_wendy 输出进程ID.getpid(). 代码: /*By C.L.Wang * Eclipse CDT ...

  4. Linux 进程控制

    分享知乎上看到的一句话,共勉: 学习周期分为学习,思考,实践,校正四个阶段,周期越短,学习效率越高. 前面讲的都是操作系统如何管理进程,接下来,看看用户如何进行进程控制. 1.进程创建 先介绍一下函数 ...

  5. Linux进程控制(三)

    1. 进程间打开文件的继承 1.1. 用fork继承打开的文件 fork以后的子进程自动继承了父进程的打开的文件,继承以后,父进程关闭打开的文件不会对子进程造成影响. 示例: #include < ...

  6. Linux进程控制——exec函数族

    原文:http://www.cnblogs.com/hnrainll/archive/2011/07/23/2114854.html 1.简介 在Linux中,并不存在exec()函数,exec指的是 ...

  7. linux进程控制命令

    & 加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &. ctrl + z 可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行. jobs 查看当前有多少在 ...

  8. linux 进程控制笔记

    进程创建 普通函数调用完成后,最多返回(return)一次,但fork/vfork会返回二次,一次返回给父进程,一次返回给子进程 父进程的返回值为子进程的进程ID,子进程的返回值为0 1.pid_t ...

  9. linux进程控制开发实例

    fork.c #include <sys/types.h> #include <unistd.h> #include <stdio.h> #include < ...

随机推荐

  1. shell 与用户交互

    bash shell如何获取命令行参数(添加到命令后的数据).命令行选项(确定命令行为的英文字母).键盘输入数据? 操作命令行参数 1 读取参数 bash shell用位置参数变量(positiona ...

  2. 网络笔记02数据解析 -1-JSON解析

    1.JSON解析 1.JSON介绍 JSON是最网络传输数据最为广泛的数据格式,没有之一,出身草根,是Javascript的子集,专门负责描述数据格式.Javascript是网页开发的一种脚本语言,和 ...

  3. ubuntu添加自定义vga输出分辨率

    Ubuntu有点折腾人....但是在折腾之后发现它更加方便,而且懂得更多的东西 最近在调试一个视频采集芯片的驱动,主要是接收vga输入和hdmi输入,在实验的过程中遇到了一个恼火的问题,就是同一台电脑 ...

  4. 微软职位内部推荐-SDEII for Windows Phone Apps

    微软近期Open的职位: Job title: Software Design Engineer II Location: China, Beijing Division: Operations Sy ...

  5. Android -- NDK开发入门

    第一步,建立一个普通的Android项目HelloNDK,然后在与src同一级的目录下新建一个jni目录: 第二步,在jni目录下新建一个hello_ndk.c文件,代码如下: #include &l ...

  6. 搭建SpringMVC+MyBatis开发框架三

    新增spingmvc.xml配置 在WEB-INF下新增spingmvc.xml,主要是配置spring扫描的包:  <?xml version="1.0" encodin ...

  7. Asp.Net 操作word 第二篇[推荐]

    引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...

  8. 或许你不知道(2):LinkedList

    一,基本的存储结构及数据存取 LinkedList与ArrayList同属List的范畴,ArrayList实现了RandomAccess接口,通过索引随机访问效率较高,而LinkedList提供了直 ...

  9. adb出现unkown host advices 错误

    今日在Windows DOS窗口中输入adb命令,如adb devices,adb shell等后,会出现如下错误: adb server is out of date.  killing... AD ...

  10. 使用javac命令编译java文件。

    今天想学习一下web services的知识,在网上找了一个教程,里面写了一个web services客户端调用,在cmd下执行的,但是没有给出用javac编译的细节.所以自己就借着这个机会学了一下: ...