Linux进程编程

Linux进程编程

使用fork函数创建一个进程
在这里插入图片描述

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
  pid_t pid;
  pid=fork();
  printf("jin cheng wei:%d\n",getpid());
  if(pid>0){
  printf("pid=%d  shi fu jin cheng:%d\n",pid,getpid());
  }else if(pid==0){
   printf("shi zi jin cheng:%d\n",getpid());
   }
  return 0;
}

如上程序,fork会创建一个新进程,父进程也会运行子进程的程序,返回值正好是子进程的pid大于0非负数,运行子进程是返回值是0,

在这里插入图片描述
例:

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
  pid_t pid;
  int i=0;
  while(1){
   printf("........\n");
   scanf("%d",&i);
    if(i==1){
      pid=fork();
        if(pid>0){
        }else if(pid==0){
        while(1){
        printf("pid=%d\n",getpid());//后面必须加\n换行符,不然显示不出来
        sleep(3);
        }
        }
     }else{
     printf("*****\n");
     }
}
  return 0;
}

在每在父进程中输入一个一就会创建一个子进程

fork函数总结:
在这里插入图片描述
getpid(void)函数
函数功能区的进程识别码
getppid()获取父进程识别码
kill -9 xxxx(进程号)可以强制结束该进程

vfork函数创建进程
在这里插入图片描述
区别如下:
实例1:

/*当使用fork是父子进程是相互争夺的*/
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(){
  pid_t pid;
  pid=fork();
  if(pid>0){
   while(1){
   printf("00000\n");
   sleep(1);
   }
  }else if(pid==0){
  while(1){
   printf("11111\n");
    sleep(1);
   }
  }
  return 0;
}

实例2:

/*当使用vfork时如果不退出子程序就会一直运行子程序,退出的时候要用合适的指令exit,否则会破坏数据*/
#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include<stdlib.h>
int main(){
  pid_t pid;
  int i=0;
  pid=vfork();
   if(pid>0){
        while(1){
           printf("i=%d\n",i);
           printf("this is father print,pid=%d\n",getpid());
           sleep(1);
           }
  }else if(pid==0){
          while(1){
           printf("this is chilid print,pid=%d\n",getpid());
           sleep(1);
           i++;
           if(i==3){
            exit(0);
           }
       }
  }
  return 0;
}

进程退出:
在这里插入图片描述
在这里插入图片描述
父进程等待子进程
wait函数
在这里插入图片描述

在这里插入图片描述

#include<stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include<stdlib.h>
int main(){
  pid_t pid;
  int i=0;
  int j=1;
  pid=fork();
   if(pid>0){
          wait(&j);
         printf("wart=%d\n",WEXITSTATUS(j));
        while(1){
           printf("i=%d\n",i);
           printf("this is father print,pid=%d\n",getpid());
           sleep(1);
           }
  }else if(pid==0){
          while(1){
           printf("this is chilid print,pid=%d\n",getpid());
           sleep(1);
           i++;
           if(i==3){
            exit(2);
           }
       }
  }
  return 0;
}

waitpid函数
在这里插入图片描述
孤儿进程
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值