1.什么是进程?为什么要有进程:
程序的一次执行就是一个进程。引入进程这是为了实现并发技术,就是可以在同一时间同时执行多项任务的技术。
2.Linux进程分类:
1.交互进程 2.批处理进程 3.守护进程
3.进程的三态:
1.就绪状态。当进程已经分配到除CPU以外所有的必要的资源,只要活得处理器便可以立即执行,这时的状态就是就绪态。
2.执行状态。当进程已经获得处理器,其程序正在处理器上执行,此时的进程状态称为执行态。
3.阻塞状态。正在执行的过程,由于等待某个事件发生而无法执行,于是放弃处理进入等待态。
4.进程创建:
fork(),一次调用两次返回,在子进程中返回0,在父进程中返回子进程的PID。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
// fork() 一次调用两次返回, 在子进程中返回0; 在父进程中返回子进程的PID。
int main()
{
pid_t pid;
int count = 0;
printf("hello linux , count = %x\n",&count);
pid = fork();
printf("@@@fork() is %d\n", pid);
if(pid > 0)
{
printf("+++child has the pid : %d\n",pid);
count ++;
printf("+++count = %d, %x\n",count, &count);
}
else if(!pid) //子进程
{
sleep(1);
printf("---count = %d, %x\n",count, &count);
}
else
{
printf("fork error\n");
}
count++;
printf("pid = %d , count = %d\n", getpid(), count);
return 0;
}
5.僵尸进程:
僵尸进程就是已经结束了的进程,但是还没有从进程表中删除,它放弃了几乎所有内存空间,没有任何可执行代码,也不能被调度,它需要它的父进程为他收尸,如果父进程没有安装SIGCHLD信号处理函数调用wait()或者waitpid()等待子进程结束,又没有显示忽略该信号,那么它就一直保持僵尸状态。如果父进程结束了,那么init进程会接手这个进程为它收尸,它还是可以被清除的。但是,如果父进程是一个循环,不会结束,那么子进程就会一直保持僵尸状态。