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. 部署git server

    http://gogs.io/docs/installation/install_from_binary.htmlwget http://gogs.dn.qbox.me/gogs_v0.6.5_lin ...

  2. 使用spring dynamic modules的理由

    spring的主要功能 spring框架提供了轻量级的容器和非侵入式的编程模型,这来自于其依赖注入.AOP和便携服务概念. osgi的主要功能 osgi服务平台提供了动态的应用程序执行环境,支持模块( ...

  3. hive hwi使用

    hwi(hive web interface)是hive命令行接口的补充. 使用方法: 1.配置: 在配置文件hive-site.xml 中,默认有hwi的配置 <property> &l ...

  4. matlab 函数的编写与调用

    matlab中写个函数,在主程序中调用该函数的方法 跟其它的编程语言都一样,但是子函数与主函数要存于不同的文件中,文件名就是函数名字.文件必须保存在current directory中,才能调用. 函 ...

  5. Machine Learning 学习笔记 (2) —— 使用牛顿法寻找极值

    本系列文章允许转载,转载请保留全文! [请先阅读][说明&总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 用牛顿法解方程 牛顿法是一种 ...

  6. java 图片处理

    /* * 图片处理类 */ package image; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.j ...

  7. Scrum仪式之Sprint计划会议

    会议时间:4.15.晚八点 会议地点:基础教学楼二楼 会议进程 • 首先我们讨论了实验第一个Sprint1要实现的功能,我们的初期目标.•  然后我们进一步梳理了第一阶段的任务和需求.•  之后对任务 ...

  8. Struts2重定向

    第一方式:  参数之间必须使用&   .&是&在xml中转义字符  <result name="error" type="redirect& ...

  9. Node.js 学习(四)Node.js 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  10. Careercup - Microsoft面试题 - 5700293077499904

    2014-05-12 00:02 题目链接 原题: For a given map (ie Bing map) given longitude/latitude/ how would you desi ...