您的位置:首页 > 其它

【2016/1】进程 进程的状态

2016-01-30 00:01 218 查看
main函数 return 的值是一个从 0 到 255的一个字节的值。

系统进程的初始化:

系统先启动 0 号进程(不可见不可操控), 然后由它启动 1 号进程(系统初始化)

0 号进程以实模式运行, 然后由 1 号开始以虚模式在内存上运行

对 kill -9 1 对1号进程无效 , 它屏蔽了所有用户对其的操作

再服务器上 别用 reboot 要手动停止所有服务之后再关机

— 写程序时要考虑关机接口, 和平的保存退出

进程是有辈分关系的:

僵尸进程的回收 (父进程的子进程死亡,却没被回收)

— 进程号是一个短整形(),如果满了就没法再创建进程

如果父进程先于子进程死亡, 那么它会被 1 号进程收养

— 不会被父进程的父进程收养

— 收养进程的原因是子进程死亡, 要由父进程回收内存

每一个进程存活期间都在内核中存在一个由内核维护的结构体

— proc是一个伪文件系统, 是内存的一个映象而不是硬盘的内容,而且是安全的

— 在/proc/下的所有数字目录中存在着进程的信息 比如maps是进程的内存空间

— 进程的代码段是它的私有信息(肉体), 还有数据段(记忆)内存控制块(细节)

— 进程外部还需要由CPU来执行 如果CPU没了 它会处于就绪态

进程的状态切换关系:
运行态
>   \
/     \
缺少CPU  /       \(时间片段完成)
/         \
<           >
就绪态 <----- 等待态 (没有其他资源)


创建进程用 fork(void) 返回一个 pid_t 类型的pid值 有符号

pstree -ap #查看进程树
ps -aux    #查看进程


任何进程都有自己的独立空间,子进程从父进程继承来空间,但继承的同一个变量的值并不一样

— 父子进程的代码段是共享的, 上面复制的是数据段

— 父子进程会执行共享的所有无条件限制的代码

_exit() 库函数回收子进程内存

_Exit() 粗暴退出

yum groupinstall “Development Tools” 组安装开发工具 安装库

wait来回收子进程, 有多少个子进程就wait多少次 但是会一直挂起

waitpid是针对性的回收, 根据option参数来更改行为, 可以不需要挂起等待

vfork() 不需要克隆数据表 直接创建一个子进程 *可以查一下

vfork创建的进程,运行时是先子进程运行然后在运行主进程的

— 如果子进程被exec成功了 那么它也被认定为结束 子进程退出

execve() 在你的进程中启动一个新的二进制文件, 同时占据了你的全部进程空间

exec族的第二个参数通常是它的参数列表, 同时参数列表的第一个元素要是命令本身

— exec创建的进程位于后台 是1号进程的子进程

env[] 是环境变量的一个数组 比如:PATH=/bin HOME=/home 等

int main(int argc, char**argv, char *env[])

getenv() 函数可以直接得到系统环境变量 需要传入环境变量的名字

setenv() 函数可以设定环境变量

exporyt(系统命令) 可以设置环境变量

freopen()是被包含于C标准库头文件stdio.h中的一个函数,用于重定向输入输出流。该函数可以在不代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: