进程的创建、待待、终止

什么是进程?

                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



           


猜你喜欢

转载自blog.csdn.net/z_juan1/article/details/80966981