linux之进程相关知识
2016-12-02 19:30
441 查看
进程
程序的一次动态执行过程
创建:创建一段虚拟地址空间,还有task_struct结构(PCB进程控制块),存放pid(进程ID)、ppid(父进程ID)、nice(优先级-20 - 19),虚拟内存地址映射表,占用的资源(cpu、内存)等。
地址空间分段:stack栈区:局部变量,传参,返回地址,递归函数可能会出现栈溢出
Heap堆区:malloc从这里分配,用完记得free,否则可能出现内存泄漏
.bss段:未初始化的全局变量区(静态)
.data段:已初始化的全局变量(静态)
.text段:正文段,存放代码和常量
调度:把task_struct加入内核进程调度列表,达到宏观意义上的多任务状态
执行:分配到时间片,把进程指令载入到cpu里运行。
消亡:清理虚拟内存空间,由父进程回收task_struct结构。
R:运行态,分为就绪态和获得时间片两种状态
S:睡眠态,等待态,阻塞等待某种条件到来
Z:僵尸态,task_struct结构没有被回收?
T:停止态,程序暂时停止。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
<:表示高优先级
N :表示低优先级
s :表示会话组长进程组会话组可能包含多个进程组
+ :表示前台进程
l :表示多进程
init作为所有进程的祖宗
ps查看进程信息–aux -ef -axj
pstree查看进程树形状态
top 动态查看进程空格
刷新 q退出
kill 发送信号格式:kill -某个信号pid
信号列表kill –l
1.SIGHUP 终端结束发出信号 2.SIGINT ctrl+c发出结束进程 3.SIGQUIT ctrl+\发出的结束进程
9.SIGKILL 结束进程,不能被终止忽略或者处理 10.SIGUSR1 12SIGUSR2给用户的信号,终止进程
19.SIGSTOP 停止进程,不能被停止忽略或者处理 20.SIGTSTP ctrl+z产生,停止进程
Kill all–信号程序给进程发信号pkill
Ctrl+z让进程停止再次唤醒fg唤到前台bg将程序置为后台,变成后台进程
改变进程优先级 nice开始运行时指定优先级renice运行时改变优先级
交互进程:前台(既可以输入又可以输出)、后台进程(只能输出),通过终端进行交互
守护进程:与终端无关,一直运行到系统关闭
批处理进程:依次运行的进程
Fork():创建一个子进程,在父子进程中fork返回值不同,父进程里返回子进程ID,子进程里返回0。
孤儿进程的产生:父进程先于子进程退出,子进程由init接管。
_exit(status):退出当前进程,给父进程发送SIGCHLD信号。不清理缓冲区。
exit(status);退出状态宏:EXIT_SUCCESSEXIT_FAILURE。同上但是清理缓冲区。
Pid_t wait(*status);阻塞等待某个子进程退出,获得子进程退出状态和ID。错误返回-1.
pid_t waitpid(pid,*status,选项); 选项为0,阻塞等待某个子进程退出;WNOHANG不阻塞,没有子进程退出直接返回,返回0.
<-1 等待组ID等于这个参数绝对值的进程退出
-1 等待任何一个子进程退出常用!
0 等待当前组的某个进程退出
>0 等待指定的进程退出常用!(退出时返回指定退出进程的pid)
Execl(可执行文件,执行,传参,NULL); 将当前进程空间替换成新的内容
守护进程的创建:
1. 创建子进程,父进程退出,孤儿进程由init接管。Fork (创建孤儿进程)
2. 设置成为会话组长。Setsid();
3. 改变工作路径。Chdir(“路径”);
4. 改变文件权限掩码。Umask(0);
关闭所有的文件描述符。获得最大文件描述符getdtablesize()。
程序的一次动态执行过程
创建:创建一段虚拟地址空间,还有task_struct结构(PCB进程控制块),存放pid(进程ID)、ppid(父进程ID)、nice(优先级-20 - 19),虚拟内存地址映射表,占用的资源(cpu、内存)等。
地址空间分段:stack栈区:局部变量,传参,返回地址,递归函数可能会出现栈溢出
Heap堆区:malloc从这里分配,用完记得free,否则可能出现内存泄漏
.bss段:未初始化的全局变量区(静态)
.data段:已初始化的全局变量(静态)
.text段:正文段,存放代码和常量
调度:把task_struct加入内核进程调度列表,达到宏观意义上的多任务状态
执行:分配到时间片,把进程指令载入到cpu里运行。
消亡:清理虚拟内存空间,由父进程回收task_struct结构。
R:运行态,分为就绪态和获得时间片两种状态
S:睡眠态,等待态,阻塞等待某种条件到来
Z:僵尸态,task_struct结构没有被回收?
T:停止态,程序暂时停止。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
<:表示高优先级
N :表示低优先级
s :表示会话组长进程组会话组可能包含多个进程组
+ :表示前台进程
l :表示多进程
init作为所有进程的祖宗
ps查看进程信息–aux -ef -axj
pstree查看进程树形状态
top 动态查看进程空格
刷新 q退出
kill 发送信号格式:kill -某个信号pid
信号列表kill –l
1.SIGHUP 终端结束发出信号 2.SIGINT ctrl+c发出结束进程 3.SIGQUIT ctrl+\发出的结束进程
9.SIGKILL 结束进程,不能被终止忽略或者处理 10.SIGUSR1 12SIGUSR2给用户的信号,终止进程
19.SIGSTOP 停止进程,不能被停止忽略或者处理 20.SIGTSTP ctrl+z产生,停止进程
Kill all–信号程序给进程发信号pkill
Ctrl+z让进程停止再次唤醒fg唤到前台bg将程序置为后台,变成后台进程
改变进程优先级 nice开始运行时指定优先级renice运行时改变优先级
交互进程:前台(既可以输入又可以输出)、后台进程(只能输出),通过终端进行交互
守护进程:与终端无关,一直运行到系统关闭
批处理进程:依次运行的进程
Fork():创建一个子进程,在父子进程中fork返回值不同,父进程里返回子进程ID,子进程里返回0。
孤儿进程的产生:父进程先于子进程退出,子进程由init接管。
_exit(status):退出当前进程,给父进程发送SIGCHLD信号。不清理缓冲区。
exit(status);退出状态宏:EXIT_SUCCESSEXIT_FAILURE。同上但是清理缓冲区。
Pid_t wait(*status);阻塞等待某个子进程退出,获得子进程退出状态和ID。错误返回-1.
pid_t waitpid(pid,*status,选项); 选项为0,阻塞等待某个子进程退出;WNOHANG不阻塞,没有子进程退出直接返回,返回0.
<-1 等待组ID等于这个参数绝对值的进程退出
-1 等待任何一个子进程退出常用!
0 等待当前组的某个进程退出
>0 等待指定的进程退出常用!(退出时返回指定退出进程的pid)
Execl(可执行文件,执行,传参,NULL); 将当前进程空间替换成新的内容
守护进程的创建:
1. 创建子进程,父进程退出,孤儿进程由init接管。Fork (创建孤儿进程)
2. 设置成为会话组长。Setsid();
3. 改变工作路径。Chdir(“路径”);
4. 改变文件权限掩码。Umask(0);
关闭所有的文件描述符。获得最大文件描述符getdtablesize()。
相关文章推荐
- linux 创建守护进程的相关知识
- linux操作系统知识分享(进程简介,SSH使用原理图,配置环境变量,系统基本信息查询,系统管理,war包部署相关命令)
- linux下多进程的文件拷贝与进程相关的一些基础知识
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux进程快照相关知识
- Linux进程阻塞的相关知识
- Linux进程快照相关知识
- linux性能优化1-进程相关基础知识
- Linux进程快照相关知识
- linux 创建守护进程的相关知识
- Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
- Linux进程阻塞的相关知识
- Linux进程相关系统调用(二)
- LINUX相关知识积累(结合网上资料)
- linux进程相关命令总结
- Linux 挂载点的相关知识
- Linux进程与作业的区别及相关命令
- Linux口令相关知识
- linux多进程相关命令
- Linux进程知识