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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hsgwpj/article/details/50609693

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中的一个函数,用于重定向输入输出流。该函数可以在不代码原貌的情况下改变输入输出环境,但使用时应当保证流是可靠的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章