一、进程的各种状态
1、R运行状态(runing):并不意味着进程一定在运行中,它表明进程要么在运行要么在运行队列里
2、S睡眠状态(sleeping):意味着进程在等待着事件完成
3、D磁盘休眠状态(Disk sleep):有时候也叫不可中断睡眠状态,在这个状态的进程通常会等待I/O的结束
4、T停止状态(stopped):可以通过发送SIGSTOP信号给进程来终止(T)进程。这个被暂停的进程可以通过发送SIGCONT信号让进程继续运行
5、X死亡进程(dead):这个状态只是一个返回状态。你不会在任务列表里看到这个状态
6、Z僵尸进程(zomble)
·僵尸进程是一个比较特殊的状态。当进程退出并且父进程(使用wait()系统调用)没有读到子进程退出的返回代码是就会产生僵尸进程
·僵尸状态会以终止状态保持在进程表中,并且一直在等待进程读取退出状态代码
·只要子进程退出,父进程还在运行,但父进程没有读取子进程状态,子进程进入Z状态
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 int main()
7 {
8 pid_t id = fork();
9 if(id < 0){
10 perror("fork");
11 return 1;
12 }
13 else if(id == 0){//child
14 printf("child[%d] is begin Z ...\n",getpid());
15 sleep(5);
16 }
17 else{//parent
18 printf("parent[%d] is sleeping ...\n",getpid());
19 sleep(5);
20 }
21 return 0;
22 }
7、孤儿进程
·父进程如果提前退出,那么子进程后退出进入Z状态后该如何处理?
·父进程先退出,子进程就被称之为“孤儿进程”。
·孤儿进程被1号init进程领养
1 #include<stdio.h>
2 #include<sys/types.h>
3 #include<unistd.h>
4 #include<stdlib.h>
5
6 int main()
7 {
8 pid_t id = fork();
9 if(id < 0){
10 perror("fork");
11 return 1;
12 }
13 else if(id == 0){//child
14 printf("I am child,pid : %d\n",getpid());
15 sleep(10);
16 }
17 else{//parent
18 printf("I am parent,pid : %d\n",getpid());
19 sleep(3);
20 }
21 return 0;
22 }
二、进程状态修改
#include<stdio.h>
2
3 int main()
4 {
5 while(1);
6 return 0;
7 }
·kill -l:查看系统支持的信号列表
·kill -SIGSTOP pid
·kill -SIGCONT pid:收到信号
三、优先级的基本概念
·CPU资源分配的先后顺序,就是指进程的有限权
·优先权高的进程有优先执行的权利。配置进程优先权对多任务环境的Linux很有用,可以改善系统性能
·可以把进程运行到指定的CPU上,把不重要的进程安排到某个CPU。可以大大改善系统整体性能
四、查看系统进程
·UID:代表执行者的身份
·PID:代表这个进程的代号
·PPID:代表这个进程是由那个进程发展衍生而来的,即父进程的代号
·PRI:代表这个进程可被执行的优先级,其值越小越早被执行
·NI:代表这个进程的nice值(即进程可被执行的优先级的修正数值)
五、修改进程的优先级命令
#include<stdio.h>
int main()
{
while(1){
sleep(1);
}
return 0;
}
1、启动进程前调整:nice
2、调整已经存在的进程的nice值:renice
3、用top命令更改已存在进程的nice :
·top
·进入top后按‘r’->进入PID ->输入nice值