进程的创建、待待、终止

什么是进程?

                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

 

 

 

           

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值