Linux下进程控制借助动漫及游戏快速理解fork-system-execve

看了大约5个小时的视频,主要讲Linux下的进程控制初步,主要涉及三个:

1. fork 创建一个新的进程,产生一个新的PID;

2. system调用系统命令

3. execve启动一个新程序,替换原有进程


很不好理解,到下午的时候想到了一些事情,把它们结合起来,会发现入门真的很容易。

先讲第一个fork创建新的进程,看过动画《火影》吧,主角鸣人有2个招牌技能,一个是影分身,一个是螺旋丸,我们就从这里讲起:

以下是Linux上运行的结果:

[]$ make
gcc -o frok1.o -c frok1.c -Wall -g
gcc -o frok1 frok1.o
----------------ok!------------


[]$ frok1
鸣人使用影分身术,产生一个影分身=0! 
鸣人使用影分身术
本尊产生螺旋丸!pid = 16886
影分身对螺旋丸加旋转! pid = 16887
本尊螺旋丸------发射!


大概了解了fork(),我们继续来看 system调用和execve之间的差别,应该怎么样来理解:系统 

system()调用系统shell来做某些事情,与在 windows下没有太大的差别;但是这个在Linux上基本不用的

<span style="white-space:pre">	</span>int match_time = 0;//主线是一场比赛
     <span style="white-space:pre">	</span>pid_t WWE = fork();
     <span style="white-space:pre">	</span>if(WWE == 0)//big show在场上是子进程
          {
            printf("Big show与队友交换上场权!PID=%d \n",WWE);
            char *argv[]={"ls",NULL};//传递给执行文件的参数数组,这里包含执行文件的参数
            execve("/bin/ls",argv,NULL); //另一个队员上场
            printf("无效了?"); //这句命令不会执行,因为场上权限已经交给另一个队员了
          }
          else
          {
            for (;match_time<5;match_time++)
            {
                printf("比赛继续!PID=%d time = %d\n",WWE,match_time);
                sleep(1);
            }
          }
          return 0;
结果:

[]$ execve1
比赛继续!PID=18655 time = 0
Big show与队友交换上场权!PID=0 
Makefile  execve1.c  frok1    frok1.o  execve1   execve1.o  
比赛继续!PID=18655 time = 1
比赛继续!PID=18655 time = 2
比赛继续!PID=18655 time = 3
比赛继续!PID=18655 time = 4


我们再重新拿鸣人举例,比如说鸣人发大招,而大招的条件是献祭(一个影分身);

那么就相当于fork出来的影分身以生命为代价消失了,这个就是execve的用法。总不见得让本尊去献祭吧,这样的话自己的程序就不受控制了~



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值