进程的概念是:程序的一个执行实例,正在执行的程序等查看进程的方法:ls /proc/具体文件名
说到进程,首先应该要想到的应该是PCB——proces control block ,PCB是一个结构体,我们用PCB这个结构体来描述进程,而在Linux操作系统下的PCB是task_struct。task_struct内容又分为标示符、状态、优先级、程序计数器、内存指针、上下文数据、I/O状态信息
记账信息、其他信息等。下面将说其中几项内容。1.标示符通过系统调用来获取标示符
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 printf("pid:%d
",getpid());
8 printf("ppid:%d
",getppid());
9 return 0;
10 }
2.状态R运行状态:并不意味着进程一定在运行中,它表明进程要么在运行中要么在运行队列中
S睡眠状态:意味着进程在等待事件完成D磁盘休眠状态:有事也叫不可中断睡眠状态,在这个状态的进程通常会等待IO结束T停止状态:可以通过发送SIGSTOP信号给进程来停止进程,这个被停止的进程可以通过发送SIGCONT信号让进程继续运行X死亡状态:这个状态只是一个返回状态,不会在任务列表中看到这个状态另外还有僵尸进程和孤儿进程(1)孤儿进程父进程先退出,则子进程就被称为“孤儿进程”,孤噩进程被1号init进程领养,即被1号进程init收养
1 #include
2 #include
3 #include
4
5 int main()
6 {
7 pid_t id=fork();
8 if(id<0)
9 {
10 perror("fork");
11 return 1;
12 }
13 else if(id==0)
14 {
15 printf("I am child,pid:%d
",getpid());
16 sleep(10);
17 }
18 else
19 {
20 printf("I am parent,pid:%d
",getpid());
21 sleep(3);
22 exit(0);
23 }
24 return 0;
25 }
26
(2)僵尸进程当进程退出并且父进程没有读取到子进程退出的返回码时就会产生僵尸进程产生僵尸进程的危害:会发生内存泄漏
1 #include
2 #include
3 int main()
4 {
5 pid_t id=fork();
6 if(id<0)
7 {
8 perror("fork");
9 return 1;
10 }
11 else if(id>0)
12 {
13 printf("parent [%d] is sleeping ...
",getpid());
14 sleep(30);
15 }
16 else
17 {
18 printf("child [%d] is begin z ...
",getpid());
19 sleep(5);
20 exit(EXIT_SUCCESS);
21 }
22 return 0;
23
24 }
25
3.优先级用ps -l来查看优先级
其中UID表示执行者的身份 PID表示进程的代号 PPID表示进程是由哪个进程发展衍生而来的,即父进程 PRI表示这个进程可以被执行的优先级,越小越先被执行 NI表示进程的NICE值