zoukankan      html  css  js  c++  java
  • eval & sleep

    ltp-ddt can_loopback

     1 source 'functions.sh';
     2 interface='can0';
     3 bitrate=1000000;
     4 do_cmd "do_can_loopback.sh -i  $interface -b $bitrate";
     5 init_txf=`get_can_stats.sh -s 'TXF'`; 
     6 init_rxf=`get_can_stats.sh -s 'RXF'`;
     7 do_cmd "candump -d $interface"; 
     8 do_cmd "cansequence -p $interface &"; suspend -i 10 -p "mem"; 
     9 prefinal_txf=`get_can_stats.sh -s 'TXF'`; 
    10 prefinal_rxf=`get_can_stats.sh -s 'RXF'`;
    11 do_cmd "sleep 20"; 
    12 final_txf=`get_can_stats.sh -s 'TXF'`;
    13 final_rxf=`get_can_stats.sh -s 'RXF'`;
    14 do_cmd "killall candump";
    15 do_cmd "killall cansequence"; 
    16 do_cmd "ip link set $interface down"; 
    17 echo "TX init=$init_txf, prefinal=$prefinal_txf, final=$final_txf"; 
    18 echo "RX init=$init_rxf, prefinal=$prefinal_rxf, final=$final_rxf";
    19 if [ "$final_rxf" -gt "$prefinal_rxf" ] && [ "$prefinal_rxf" -gt "$init_rxf" ] && [ "$final_txf" -gt "$prefinal_txf" ] && [ "$prefinal_txf" -gt "$init_txf" ]; 
    20 then exit 0; 
    21 else exit 1; 

    注意到第8行 do_cmd末尾有&

    &作业控制,将命令变成背景下工作

    注:do_cmd和suspend都是ltp-ddt的common script用来实现通用功能。

    do_cmd通过eval执行命令

    suspend通过sleep `random_ne0 $max_atime`

    candump canconfig cansequence都是canutils are available at pengutronix website https://git.pengutronix.de/cgit/tools/canutils/

    一开始没想通为什么final_>prefinal_>init_

    将do_cmd和suspend中的实质提取出来,做了个测试程序。

    sh01.sh 循环打印十次Hello World!中间延时1秒

    1 #!/bin/bash
    2 i=0
    3 while [ $i -lt 10 ]
    4 do
    5 echo -e "Hello World!a 
    "
    6 sleep 1
    7 ((i+=1))
    8 done

    1.

    1 #!/bin/sh
    2 eval "./sh01.sh";
    3 #sleep 5
    4 echo "idyll"

    顺序打印十次Hello World!最后输出idyll 注意eval最后没有&,所以顺序执行。

    2.

    1 #!/bin/sh
    2 eval "./sh01.sh &";
    3 #sleep 5
    4 echo "idyll"

    与1比多了个&,上下两条语句同时执行,所以先打印idyll,后输出十次Hello World!

    3.

    1 !/bin/sh
    2 eval "./sh01.sh";
    3 sleep 5
    4 echo "idyll"

    没有&,输出十次Hello World!等待5秒,在输出idyll

    4.

    1 #!/bin/sh
    2 eval "./sh01.sh &";
    3 sleep 5
    4 echo "idyll"

    输出五次Hello World!输出idyll,再输出五次Hello World!

    总结下来&是实现命令的并行执行,&前面的语句在后台执行,继续后面的语句执行。

    回到can_loopback

    do_cmd "cansequence -p $interface &"应该是不停往can口发数据包,在后台运行,suspend -i 10 -p "mem"; suspend十次random time后去读收发stauts
    sleep 20后再去读收发stauts,当然是越来越大,为啥要用suspend 里面好像设计了power manager的部分等板子回来后再细究。
  • 相关阅读:
    Webservice接口和Http接口
    java多线程
    时间显示成一串阿拉伯数字
    jsp静态与动态包含的区别和联系
    解决Win10默认占用80端口
    JAVA中文乱码之解决方案
    相对路径与绝对路径的差异
    JSP静态包含和动态包含的区别和联系
    数据库Oracle
    智能指针shared_ptr的用法
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10286393.html
Copyright © 2011-2022 走看看