您的位置:首页 > 运维架构 > Linux

UNIX/linux进程和作业控制

2012-11-27 21:44 260 查看
用于创建和使用进程的系统调用有fork、exec、wait和exit。

举例:shell运行外部命令时,先fork调用创建当前进程的一个副本。子进程使用exec将他自身从运行shell的进程变成运行外部程序的进程。其次,父进程使用wait系统调用暂停执行,直到子进程结束执行。最后,外部程序结束,子进程使用exit终止自身的执行。子进程释放所有资源,但保留相关数据条目,成为一种数据结构——僵尸进程。若父进程执行了wait则此时父进程立即被内核唤醒查看相关僵尸进程的执行数据,然后移除僵尸进程条目。若父进程没有执行wait且没有被杀,那么僵尸进程将会保留。

子进程运行时,父进程意外死亡会使子进程称为孤儿进程。孤儿进程被init收养,称为init的子进程。所以处理上面僵尸进程的一种方法是杀死其父进程,使其称为孤儿僵尸进程而被init收养,有init清除他的残留数据。

上面说进程调用fork生成一个副本即子进程。父进程等待,子进程运行程序。fork调用后,父进程返回他的PID,子进程返回为0.这就区分了父进程与子进程。

作业控制

作业控制是一项由shell支持的特性,允许执行多项作业,一个在前台执行,其他在后台运行。(当你在命令的末尾加一个&, 不必等该命令程序执行完毕,而可以立即输入运行其他命令)。

作业与进程的区别是他指整个命令行所需的全部进程。进程由内核控制,而作业由shell控制。如

who | cut -c 1-8 | sort | uniq -c 和 data;who;uptime;cal 12 2008;

第一条命令是一个管道线,生成4个进程,被认为是一个作业。第二个是四个进程。

fg 挂起作业

每个作业处于前台执行、后台执行、待续。使用fg可将改程序返回前台。使用bg将作业移至后台。

suspend命令将shell中的当前程序挂起。

jobs显示作业列表

jobs显示所有作业列表。

ps程序 显示进程信息

-A 显示所有进程(等价于-e)(utility)

-a 显示一个终端的所有进程,除了会话引线

-N 忽略选择。

-d 显示所有进程,但省略所有的会话引线(utility)

-x 显示没有控制终端的进程,同时显示各个命令的具体路径。dx不可合用。(utility)

-p pid 进程使用cpu的时间

-u uid or username 选择有效的用户id或者是用户名

-g gid or groupname 显示组的所有进程。

U username 显示该用户下的所有进程,且显示各个命令的详细路径。如:ps U zhang;(utility)

-f 全部列出,通常和其他选项联用。如:ps -fa or ps -fx and so on.

-l 长格式(有F,wchan,C 等字段)

-j 作业格式

-o 用户自定义格式。

v 以虚拟存储器格式显示

s 以信号格式显示

-m 显示所有的线程

top、prstat监视系统进程

显示重要的动态的进程信息 cpu信息

pstree显示进程树

pstree [-aAcGnpu] [pid | userid]

kill杀死进程 向进程发送信号

可以用ps显示进程ID 然后用kill ID杀死

kill -STOP 进程 用来想这个进程发送信号STOP

nice改变进程优先级

nice以一个较低的优先级运行程序

renice改变现有进程的优先级

renice niceness -p PID

守护进程

大多数进程不是由用户 运行的程序。这些不与终端相连的后台运行的程序成为守护进程(对应windows的服务程序)。守护进程执行系统所需的大量任务,等待事件的发生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: