您的位置:首页 > 编程语言

Unix环境高级编程-进程控制(1)

2016-07-30 22:10 190 查看
用户ID和组ID:
在设计应用时,总是试图使用最小特权(least privilege)模型,依据此模型,程序应当只具有为完成给定任务所需的最小权限,可用setuid函数设置实际用户ID和有效用户ID。用setgid函数设置实际组ID和有效组ID。下表总结了更改3个用户ID的不同方法



解释器文件:

起始行形式是:#!  pathname

最常见的解释器文件以下列行开始:#! /bin/sh

对这种文件的识别是由内核作为exec系统调用处理的一部分来完成的,内核实际使用的不是解释器文件,而是文件中第一行pathname指向的文件。

解释器的作用:

1.有些程序是用某种语言写的脚本,解释器文件可将这一事实隐藏。

2.解释器脚本使我们可以使用除了/bin/sh以外其他shell来编写shell脚本。

函数system:



该函数在实现中,调用了fork,exec和waitpid。因此有三种返回值

1.fork失败或waitpid返回除了EINTR之外的出错,则system返回-1

2.如果exec失败(表示不能执行shell),则其返回值如同shell执行了exit(127)一样。

3. 否则所有函数都成功(fork,exec和waitpid),system返回值是shell的终止状态。

进程会计:

unix提供一个选项进行进程会计处理,启动后,每当进程结束后内核就会写一个会计记录,典型的会计记录包含命令名,所使用cpu时间总量,用户ID和组ID,启动时间等。

一个至今没有说明的函数acct启动和禁用启动会计,唯一使用这个函数的是accton命令,会计记录写到指定的文件中去,会计记录样式基本如下:



会计记录所需的各个数据由内核保存在进程表中,并在一个新进程被创建时初始化,进程终止时写一个会计记录。这会带来一些问题:

1.不能获取永远不终止的进程的会计记录,像init进程,不会产生会计记录

2.在会计文件记录的顺序对应于进程终止的顺序,而非它们启动的顺序。会计记录对应于进程而不是程序,在fork之后,内核为子进程初始一个记录,而不是在一个新程序被执行时初始化,虽然exec并不创建一个新的会计记录,但相应记录中的命令名改变了,这意味着,如果一个进程顺序执行了3个程序,只会写最后一个程序,但cpu时间是三个程序之和。

进程调度:

unix对于进程提供的只是给予调度优先级的粗粒度的控制,调度策略和调度优先级是由内核确定的,进程可通过调整nice值选择以更低优先级运行(通过调整nice值降低它对cpu的占有),进程可以通过nice函数获取或更改它的nice值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: