Linux系统编程—进程学习

Linux系统编程—进程学习

进程的相关内容
创建进程函数fork的使用
vfork创建进程
进程退出的方式
父进程等待子进程退出
孤儿进程

一、进程的相关内容

1.什么是进程,什么是程序,区别是啥?

程序是静态的概念,gcc xxx.c -o pro,磁盘中生成的pro文件就叫做程序
进程是程序的一次运行活动,通俗的说就是程序跑起来,系统就多了一个进程。

2.如何查看系统中的进程?

使用ps指令查看,同时可使用grep来查找程序中你想找的某个进程
3.什么是进程标识符?
每个进程都有一个非负整数表示的唯一ID,叫做pid,就是进程标识符。
pid=0:称为交换进程(swapper)作用——进程调度
pid=1:init进程 作用——系统初始化

4.什么是父子进程?
进程A创建了进程B,A叫做父进程,B叫做子进程。

5.c程序的存储空间是如何分配的?
在这里插入图片描述

二、创建进程函数fork的使用

在这里插入图片描述
代码示例:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main()

{
pid_t pid;

printf("this is pid=%d\n",getpid());

pid= fork();

if(pid>0){
printf("this is father pid, pid=%d\n",getpid());  // 父进程
}else if(pid==0){

printf("this is son pid,pid=%d\n",getpid());   //  子进程

}
return 0;
}

三、vfork创建进程

在这里插入图片描述
代码示例:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main()

{
    pid_t pid;
    int cnt=0;

        pid=vfork();

      if(pid>0){
           while(1){
               printf("cnt=%d\n",cnt);
               printf("this is father pid, pid=%d\n",getpid());  //父进程
               sleep(1);
               }

     } else if(pid==0){

         while(1){
           printf("this is son pid,pid=%d\n",getpid());  //子进程
           sleep(1);  
           cnt++;

          if(cnt==3) //当cnt=3时,子进程退出
          {  
              exit(0);
                }
            }
       }
  return 0;
}

四、进程退出的方式

1.正常退出
2.异常退出

在这里插入图片描述
在这里插入图片描述

五、父进程等待子进程退出

在这里插入图片描述
在这里插入图片描述
代码如下:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main()

{
        pid_t pid;
        int cnt=0;
        int status=10;
        pid=fork();

        if(pid>0){
                wait(&status); //等待子进程的退出
               //waitpid(pid,&status,WNOHANG);
                printf("son pid quit,son status=%d\n",WEXITSTATUS(status));// 收集子进程退出的号
                while(1){
                        printf("cnt=%d\n",cnt);
                        printf("this is father pid, pid=%d\n",getpid());
                        sleep(1);
                }

        } else if(pid==0){

                while(1){
                        printf("this is son pid,pid=%d\n",getpid());
                        sleep(1);
                        cnt++;

                        if(cnt==5){
                                exit(2); //子进程程序退出
                        }
                } 
        }    
        return 0;
}     

六、孤儿进程

在这里插入图片描述
代码示例:

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>


int main()

{
        pid_t pid;
        int cnt=0;

        pid=fork();

        if(pid>0){

                printf("this is father pid, pid=%d\n",getpid());

        }else if(pid==0){

            while(1){
        printf("this is son pid,pid=%d,my father pid=%d\n",getpid(),getppid());
                        sleep(3);
                        cnt++;

                        if(cnt==5){

                                exit(2);
                        }
                } 
        }    
        return 0;
}     

总结
要理解清楚进程的相关概念及作用,懂得其用法。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值