进程线程----------------进程线程间通信

​进程

进程控制块​:​​             进程标识PID、进程用户、进程状态、优先级、文件描述符

​进程类型:                ​​交互进程、批处理进程、守护进程

命令

PID

​PRI   进程优先级

top   实时进程

​nice  数值越大优先级越低

进程

​创建子进程 :            ​fork 失败时返回-1,成功时父进程返回子进程的进程号,子进程返回0 

​要点:   ​1.子进程只执行fork之后的代码。

               ​2.父子进程执行顺序是操作系统决定的。

#include <stdio.h>
#include <unistd.h>


int mian(int argc,char **argv)
{
   pid_t pid;
   printf("before fork\n");
   pid = fork();  
   if(pid>0){
      printf("this is father process\n");
   }else if(pid ==0){
     printf("this is child process\n");
   }else if(pid<0)
   {
        perror("fork");
        return 0;
   }
   printf("pid=%d\n",(int)pid);
   printf("after fork\n");
}

​父子进程:

1.​子进程继承了父进程的内容

 2. 父子进程有独立的地址空间,互不影响

​若父进程先结束:1.​子进程成为孤儿进程,被init进程收养。2.​子进程变成后台进程。

​若子进程先结束 :​父进程如果没有及时回收,子进程变成僵尸进程

#include <stdio.h>
#include <unistd.h>

int main( ){
    pid_t pid;
    int i;
    for(i=0;i<5;i++){
    pid  = fork();
    if(pid<0){
        perror("fork");
        return 0;
   }else if(pid == 0){
     printf("child process\n");
     sleep(5);
  //break;    直接退出不执行下面的代码
 }else{
  printf("father process\n");
  sleep(5);
}


}





}

3.进程的结束:

​进程的结束 exit/_exit   (1).​结束当前的进程并返回status。(2)​exit结束进程时会刷新缓冲区.

​return和exit的区别 :      ​main函数结束时会隐式的调用exit函数,普通函数return是返回上一级

​4.进程的回收  ​wait

​pid_t wait 成功时返回回收的子进程的进程号;失败时返回EOF     若子进程没有结束,父进程一直阻塞   若有多个子进程,哪个先结束就先回收   status指定保存子进程返回值和结束方式的地址        status为NULL表示直接释放子进程PCB,不接收返回值。

​waitpid :​进程回收

      

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值