什么是进程?
https://blog.csdn.net/Z_JUAN1/article/details/80721136
Linux下进程的控制
进程创建
进程等待
进程终止
1.进程创建:
进程的创建就是父进程创建子进程的过程
fork()函数
init fork(void)
特点:
1.分配进程标识符
2.创建pcb
3.复制父进程的环境
4.给子进程分配内存空间,将父进程的数据拷贝到该进程
5.将子进程置成就绪状态,放入就绪队列。
从fock的返回值开始执行,执行两份(1份子进程1份父进程)
返回值 是pid_t pid=fock();(继承中段、继承优先级、不继承ppid,pid)
1 #include<stdio.h>
2 #include<unistd.h>
3
4 int main( void )
5 {
6 printf("before fock\n");
7
8 pid_t pid =fork();
9 if(pid == 0) //子进程
10
11 {
12 printf("child\n");
13 }
14 else if(pid >0) //父进程
15 {//wait(NULL);
16 printf("father\n");
17 }
18 printf("over");
19 }
此时我们发现fork之后程序是父子交替在执行
僵尸进程和孤儿进程
孤儿进程:父进程死亡后,子进程成为孤儿进程,进程号就写成1
僵尸进程:如果子进程先死亡,父进程没有去用wait收他,子进程成为僵尸进程
getpid(); (获得一个进程的pid,就是int型)
getppid(); (获得一个父进程的进程pid,就是int型)
5 int main()
6 {
7 printf("befork fork %d\n",getpid());
8
9 pid_t pid=fork();
10
11 if(pid == 0)
12 {
13 //while(1)
14 printf("child %d,my parent=%d\n",getpid(),getppid());
15 }else if(pid>0){
16 //while(1)
17 printf("parent:%d,my child =%d\n",getpid(),pid);
18 sleep(1);
19 }
20
21 }
假如我们上面不slepp(1),父进程执行完直接退出,会出现什么结果呢?
可以看到子进程里面pid=1,成为了孤儿进程
2.进程等待
wait函数
函数原型:pid_t wait(int *s)
作用: wait是阻塞函数,直到有子进程死亡(不是再有僵尸进程)
3.进程终止
进程终止分为5中其中包括正常终止和不正常终止
正常终止:
1.main 退出
2.exit();0~255
执行退出处理程序
清空缓存
_exit:系统退出程序(无刷新缓存的功能)
atexit
atexit//注册退出程序
只有在退出之前才执行
不正常终止:
1.Ctrl+c
2.about()
3.kill pid