精华内容
下载资源
问答
  • DC/PT在任意位置停止执行脚本方法

    千次阅读 2017-01-07 21:55:33
    DC/PT在任意位置停止执行脚本方法现在的RTL综合的环境中,基本上都是用脚本写好的集成平台。每次项目只需要变更SDC和lib及设计相关的约束/设定即可。这样可以将设计者的经验不断积累并往下流传,后续的项目开发的...

    DC/PT在任意位置停止执行脚本的方法

    现在的RTL综合的环境中,基本上都是用脚本写好的集成平台。每次项目只需要变更SDC和lib及设计相关的约束/设定即可。这样可以将设计者的经验不断积累并往下流传,后续的项目开发的时候可以极大的节省搭建环境的时间,让后端工程师专注于设计本身,而不是将经历放在环境的搭建和debug 上面。
    不过,一个复杂一点的RTL综合环境很可能包含几十个TCL脚本。更为恶心的是,有写TCL脚本中,还会调用到外部的程序,如perl/shell之类的脚本,等待这些外部脚本执行完成之后,DC继续执行后续的TCL脚本。
    每次项目开始的时候,都需要花一定的时间进行项目的移植,这时候环境总难免在某些过程中出错。或者,有时候,我们希望环境脚本执行到某一句的时候就停下来,不继续执行后续的脚本,但是,又希望DC程序不退出,以方便我查看当前的设计或者环境是否存在什么问题。
    以前我的方法是,如果不希望执行某个行开始以后的所有脚本,我就将这一行以后的所有行都comment out掉。但是,这样做很麻烦。如果这一行是在main script中还好,如果这一句是在sub script(被main scipt 或者其他的sub script source的scipt)中,那么就要花很多的时间进行comment out了。不注意的情况下还很容易出错。
    于是,我一直期待一个命令,执行这个命令之后,DC会停止执行后续的所有脚本。但是,翻遍了DC的command guide也没有找到这个命令。不知道synopsys为什么不设计一个这样的脚本。当然,不排除我看漏掉了的可能,也许别人时设计了的呢。
    直到今天,重新看DC的students guide的时候,注意到了这个东西:
    

    sh_continue_on_error

    之前做项目的时候,由于设计中有批量对设计进行处理的命令,会出现一些意料之中的错误,所以这个命令总是会被有意无意地设置成true。以让DC在遇到错误的时候能够继续执行下去。但是,如果被设置成false,DC在执行的过程中,如果出错,就会停止后续脚本的执行,然后返回dc_shell的命令行。
    如果我希望在某一句停下来,则执行了这一句之后,将sh_continue_on_error设置为false,然后执行一个错误的命令,然后,DC就会在发生错误的这一句停下来。然后我就可以进行我的操作了。这样,用这两行命令,也可以使DC在脚本的任意位置停下来。
    命令如下:
    
    ~the line & above is your tcl code~~~
    set sh_continue_on_error false
    HAhahahahah ;#这里随便写一个DC不存在的命令。然后DC执行到这里的时候就会停止下来。
    ~the line & above is your tcl code~~~

    下面给出一个示例:

    脚本stop_excute_script.tcl

    set sh_continue_on_error_org_value $sh_continue_on_error
    set sh_continue_on_error false
    echo "SHAOKC0"
    current_design                                                                                                                                                                                                     
    echo "SHAOKC1"
    ###the "HAhahahahah" will not be recognized by DesignCompiler.So,this line will cause an error.
    ###the DesignCompiler will stop at here.
    HAhahahahah
    echo "SHAOKC2"
    set sh_continue_on_error $sh_continue_on_error_org_value
    echo ""

    执行的结果:
    这里写图片描述

    从上面的图中可以看出,source的脚本,在执行到 “HAhahahahah” 的时候,由于DC中没有这个命令,所以报错,从而导致DC退出脚本的执行,回到dc_shell命令行。

    附录

    下面是sh_continue_on_error的解释:

    dc_shell> man sh_continue_on_error
    3.  Attributes and Variables                                 Command Reference
                                 sh_continue_on_error
    
    NAME
           sh_continue_on_error
                  Allows  processing  to  continue when errors occur during script
                  execution with the source command.
    
    TYPE
           Boolean
    
    DEFAULT
           application specific
    
    DESCRIPTION
           This variable is deprecated.   It  is  recommended  to  use  the  -con-
           inue_on_error  option  to  the  source command instead of this variable
           because that option only applies to a single script, and not the entire
           application session.
    
           When  set  to true, the sh_continue_on_error variable allows processing
           to continue when errors occur.  Under normal circumstances,  when  exe-
           cuting  a script with the source command, Tcl errors (syntax and seman-
           tic) cause the execution of the script to terminate.
    
           When sh_continue_on_error is set to false, script  execution  can  also
           terminate  due  to new error and warning messages based on the value of
           the sh_script_stop_severity variable.
    
           To determine the current value of  the  sh_continue_on_error  variable,
           use the get_app_var sh_continue_on_error command.
    
    SEE ALSO
           get_app_var(2)
           set_app_var(2)
           source(2)
           sh_script_stop_severity(3)
    展开全文
  • Shell脚本运行中的停止方法

    千次阅读 2020-08-21 20:53:26
    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理? 方式1 killall file-flume-kafka 说明:killall是一个命令,不是kill all,file-flume-kafka是脚本名,此方法简单粗暴。 方式二 ssh $i "ps -...

    Linux系统Shell中提交了一个脚本,但是需要停止这个进程,如何处理?

    方式1

    killall file-flume-kafka
    
    说明:killall是一个命令,不是kill all,file-flume-kafka是脚本名,此方法简单粗暴。
    

    方式二

    ssh $i "ps -ef | grep file-flume-kafka | grep -v grep | awk '{print \$2}' | xargs kill"
    
    ps参数:
    -e:显示所有进程
    -f:全格式显示
    ps -ef 第二个参数就是进程ID 
    
    grep file-flume-kafka | grep -v grep,file-flume-kafka为脚本名,并去除包含grep的行,避免影响最终结果正确性
    grep aaa | grep -v bbb:可以过滤掉查询aaa结果中包含了bbb的行。
    grep -v 可以理解为 grep not
    举例:cat test.log | grep "login"|grep -v "deviceType"表示找出test.log中包含login关键字,且没有deviceType这个字段的行
    
    awk{print $2}’:逐行的读入,以空格为默认分隔符将每行切片,取第二行。
    awk参数 -F : 指定输入文件折分隔符。
    比如awk -F : ‘/^root/{print $7}passwd 表示搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
    
    xargs kill:将前面的运行结果作为kill命令的参数运行。
    xargs表示取出前面命令运行的结果,作为后面命令的输入参数。
    xargs可选项:-n1,将每一个参数传给后面命令依次执行。
    
    特别注意:
    ssh $i 是登录到你执行脚本的那台虚拟机上,i代表虚拟机名字,非本机登录需要设置免密。当在本机上进行此操作时,无需执行这个命令。另外后面$2前的转义\也必须省略,无需转义。命令如下:
    ps -ef | grep file-flume-kafka | grep -v grep | awk '{print $2}' | xargs kill
    

    具体例子如下:

    假设这个是我正在运行的脚本,我想kill它,但是我不知道他的进程号,只知道脚本的名称。
    在这里插入图片描述

    我的脚本名称为dws-dwt.sh,根据过滤条件我查找出脚本有两个进程号,为什么会这样呢?

    因为你查找进程时用到了grep命令,而这个命令执行的时候带有你查找的进程参数,同时这也是一个进程。
    
    例如 这条命令 ps -ef | grep dws-dwt.sh 其实是分两步执行的 先执行ps -ef 再执行 grep dws-dwt.sh 这个命令本身执行的时候也是一个进程,并把也带有dws-dwt.sh。
    
    所以你要查找dws-dwt.sh进程,需要把 grep dws-dwt.sh这个进程过滤掉,才是最后的结果,怎么过滤呢,肯定不能用dws-dwt.sh做关键字,只能用grep做关键字
    

    执行结果有两个进程号:

    ps -ef | grep dws-dwt.sh
    

    在这里插入图片描述

    最终结果,得到进程号:

    在这里插入图片描述

    #执行命令停止进程
    ps -ef | grep dws-dwt.sh | grep -v grep | awk '{print $2}' | xargs kill
    
    
    
    
    展开全文
  • 编写一个服务程序后,通过这三个脚本去编译、执行停止。 build.sh脚本文件 #!/bin/bash # 1.该行是如果出现错误,就退出脚本执行 set -e # ---设置基本环境变量start--------------------- export LC_ALL=en_...

      编写一个服务程序后,通过这三个脚本去编译、执行、停止。

    build.sh脚本文件

    #!/bin/bash
    # 1.该行是如果出现错误,就退出脚本执行
    set -e
    
    # ---设置基本环境变量start---------------------
    export LC_ALL=en_US.UTF-8
    # 1. BASH_SOURCE[0]等价于BASH_SOURCE,取得当前脚本文件所在的路径及文件名, eg: my/src/file/build.sh
    # 2. %/*代表取从头到最后一个slash之前的所有内容, eg:my/src/file
    # 3. #*/代表去取从第一个slash之后的所有内容, eg: src/file/build.sh
    export HOME_PATH=`cd ${BASH_SOURCE[0]%/*}; pwd`
    export WORK_DIR=$HOME_PATH/build
    export TARGET="android"
    export ACTION=""
    export SETENV_PATH=""
    export BUILD_VERSION="debug"
    export OUTPUT_PATH=""
    #-----设置基本环境变量end---------------------
    
    function process_param()
    {
    # 1. 命令行解析可参看另一篇博文Linux中shell一些变量解释
        TEMP=`getopt -o w:t:a:s:v:o: --long work-dir:,target:,action:,setenv-path:,version:,output: -n 'build.sh' -- "$@"`
    # 1.这里没有执行其他脚本,所以默认都是等于0的。
    # 2.文件描述符:0代表标准输入,1点标准输出,2代表标准错误
    # 3.重定向符号:>, <
        if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
    
        eval set -- "$TEMP"
    # 1.对每个传入的参数进行处理
        while :; do
            case "$1" in
                -w|--work-dir) export WORK_DIR=$2; shift 2;;
                -t|--target) export TARGET=$2; shift 2;;
                -a|--action) export ACTION=$2; shift 2;;
                -s|--setenv-path) export SETENV_PATH=$2; shift 2;;
                -v|--version) export BUILD_VERSION=$2; shift 2;;
                -o|--output) export OUTPUT_PATH=$2; shift 2;;
                --) shift; break;;
                *) echo "Internal error!" ; exit 1 ;;
            esac
        done
    # 1.{var:-string}:如果var为空,则用string替换; 如果var不为空,就用var替换
    # 2.{var:=string}:如果var为空,则用string替换并且赋值给var; 如果var不为空,就用var替换
        export WORK_DIR=${WORK_DIR:-$HOME_PATH/build}
        export TARGET=${TARGET:-"android"}
        export ACTION=${ACTION:-""}
        export SETENV_PATH=${SETENV_PATH:-""}
        export BUILD_VERSION=${BUILD_VERSION:-"debug"}
        export OUTPUT_PATH=${OUTPUT_PATH:-""}
    }
    
    function prepare_env()
    {
        # 1.设置工程环境变量
        export MY_CODE=`pwd`
        export MY_INTERFACE=$MY_CODE/itf
        export MY_PATH=$MY_CODE
    # -z:代表如果后面$SETENV_PATH的长度为0,则为真
        if [ -z $SETENV_PATH ];then
            echo "please set setenv via --setenv-path/-s "
            exit 1
        fi
    }
    
    function build_project()
    {
    # -d:如果$WORK_DIR存在且为一个目录则为真
        if [ ! -d $WORK_DIR ]; then
            mkdir -p  $WORK_DIR
        else
            if [ "`ls -A $WORK_DIR`" != "" ];then
              echo "rm files in work directory"
              rm -r $WORK_DIR/*
            fi
        fi
    # 1.切换到$WORK_DIR目录下
        pushd $WORK_DIR
    
        if [ "$TARGET" == "android" ];then
            source $SETENV_PATH
            toolchain_path=$TOP/toolchain cmake -DCMAKE_TOOLCHAIN_FILE=$TOP/build/aos-toolchain.cmake  -DCMAKE_INSTALL_PREFIX=$TOP/out ..
        elif [ "$TARGET" == "linux" ];then
            echo "start make target linux"
            cmake ..
        else
            echo "please set target as android or linux via -t/--target"
        fi
    
        if [ "$ACTION" == "install" ];then
            make install
            if [ "$OUTPUT_PATH" == "" ];then
                return
            fi
            if [ ! -d $OUTPUT_PATH ]; then
                mkdir -p $OUTPUT_PATH
            else
                if [ "`ls -A $OUTPUT_PATH`" != "" ];then
                    echo "rm current output file"
                    rm -r $OUTPUT_PATH/*
                fi
            fi
            cp -r $HOME_PATH/bin/* $OUTPUT_PATH
        else
            make -j16
        fi
    }
    
    process_param $*
    prepare_env
    build_project
    

    start.sh脚本文件

    #!/bin/bash
    cur_path=`pwd`
    
    export LD_LIBRARY_PATH=${LD_LIBARAY_PATH}:${cur_path}/libs/
    export MY_MODULE_ENV=${cur_path}
    
    
    if [ ${ANDROID_DATA} ]
    then
    # 1.grep -v代表过滤掉包含grep的选项
        processId=`ps -ef | grep myModule | grep -v grep | busybox awk '{print $2}'`
    else
        processId=`ps -ef | grep myModule| grep -v grep | awk '{print $2}'`
    fi
    
    if [ $processId ]
    then
        echo "please stop first!"
        exit 1;
    fi
    
    ./hmi_maintenace &
    logcat --pid $processId

    stop.sh脚本文件

    #!/bin/bash
    if [ ${ANDROID_DATA} ]
    then
        processId=`ps -ef | grep touchEvent | grep -v grep | busybox awk '{print $2}'`
    else
        processId=`ps -ef | grep touchEvent | grep -v grep | awk '{print $2}'`
    fi
    
    if [ $processId ]
    then
        kill -9 $processId
    fi

     

    展开全文
  • bat脚本执行一系列外部脚本或命令中途任意环节失败而结束整个脚本执行处理方法
                   

    举一个常见例子:

    在一个发布脚本中,进行realse操作可能需要如下几个步骤:


    1. 调用build工具进行build

    2. 使用SSH工具上传build出的jar包

    3. 使用SSH工具向远程主机发布重启服务的命令


    上述任何环节出错,则后续动作再执行已无意义,所以整个脚本应该停止执行,这种处理可以使用以下命令方式:

    call 第三方脚本或程序1

    if "%errorlevel%"=="1" goto :end

    call 第三方脚本或程序2

    if "%errorlevel%"=="1" goto :end


    以下是一段示例代码:

    @echo offset profile=%1if "%2"=="release" goto releaserem #######################################################################################:releaseecho.echo ***************************************************************************************echo BUILD ALL MODULES...echo ***************************************************************************************call mvn install -DskipTests=true -P%profile%if "%errorlevel%"=="1" goto :releasefailedecho.echo ***************************************************************************************echo DEPLOY CORE MODULE...echo ***************************************************************************************call its-core\target\classes\core-dev-tool.bat deployif "%errorlevel%"=="1" goto :releasefailedecho.echo ***************************************************************************************echo DEPLOY CLIENT MODULE...echo ***************************************************************************************call its-client\target\classes\client-dev-tool.bat deployif "%errorlevel%"=="1" goto :releasefailedecho.echo ***************************************************************************************echo DEPLOY SERVER MODULE...echo ***************************************************************************************call its-server\target\classes\server-dev-tool.bat deployif "%errorlevel%"=="1" goto :releasefailedecho.echo ***************************************************************************************echo DEPLOY SDK MODULE...echo ***************************************************************************************call its-sdk\target\classes\sdk-dev-tool.bat deployif "%errorlevel%"=="1" goto :releasefailedecho.echo ***************************************************************************************echo RESTART HBASE ...echo ***************************************************************************************call its-server\target\classes\server-dev-tool.bat restart-hbaseif "%errorlevel%"=="1" goto :releasefailedgoto releasesuccessrem #######################################################################################:releasesuccessecho.echo.echo ***************************************************************************************echo RELEASE SUCCESS!!echo ***************************************************************************************goto end:releasefailedecho.echo.echo ***************************************************************************************echo RELEASE FAILED!!echo ***************************************************************************************goto end:end


               
    展开全文
  • Python脚本运行发生异常时,会出现导致运行停止的问题,此时可以通过异常处理,来使脚本继续执行下去。 异常处理常见的方法: try/except try/finally try/except 带异常类型 只有发生指定类型的异常,才会打印...
  • 有少数情况因为js处理内容较多,系统计算标红和刷新页面较慢,IE可能会弹框提示“是否停止运行脚本”,若想要继续,点击“否”即可。并同时按照下面的设置更改一下注册表,即可解决弹框问题。 ...
  • 脚本服务化目的:python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据。但是网上买的服务器会不定时进行维护,服务器会被重启。这样我们的爬虫服务就无法运行。这个时候我们...
  • a = 'str' print(a) 比如说很简单的这个东西,运行结果是这样的 求问大家,到底是哪里的设置除了问题?
  • Linux 是通过信号来实现进程间通信的,所以我们编写脚本时,可以通过捕捉特定的信号来控制Shell脚本的操作。下面简单列举一下常见的Linux 信号生成信号Linux 允许用键盘组合键生成两种基本的Linux信号,1.中断...
  • 脚本服务化目的:python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据。但是网上买的服务器会不定时进行维护,服务器会被重启。这样我们的爬虫服务就无法运行。这个时候我们...
  • Shell 脚本对信号的处理执行脚本后,按键盘 Ctrl+C 无法终止的脚本 #!/bin/bash #使用 trap 命令可以拦截用户通过键盘或 kill 命令发送过来的信号 #使用 kill -l 可以查看 Linux 系统中所有的信号列表,其中 2 ...
  • ①开机自动运行: 先写了测试脚本,在/usr...②定时运行脚本: 以下部分转自:http://hi.baidu.com/michaelxdt/item/a8e4fec22a59867388ad9e62 cron,是一个Linux定时执行工具,可以在无需人工干预的情况下运
  • 循环执行脚本

    千次阅读 2019-06-18 14:56:36
    do  循环体donefor循环的列表生成方法如下:in后列表有几个既循环赋值给i几次 循环执行几次seq 正反跳步生成列表双引号会把参数变为一个整体"$* " 会变为一个整体参数 既abc"$@" 会分辨显示参数 既 a ...
  • 1.脚本位置——Nginx目录下 2.nginx_start.bat代码 start nginx chcp 65001 echo "-------------nginx--------启动成功------------" pause 运行效果 3.nginx_stop.bat代码 taskkill /f /t /im nginx.exe...
  • 脚本运行时间的最长限制默认值为90秒,这是防止无限次循环的进行,是很有用的防护措施。 不过,在一些特殊场合中,你也许面临着脚本运行时间大于90秒的场合,例如,当你的脚本生成了一个十分巨大的主页时,你肯定不...
  • 一、前言 本篇主要讲如何通过Python脚本进行驱动locust做性能测试 二、登录性能脚本 #独立场景性能测试: 用户登录 #需求:用户量100,每秒并发10个 ...from locust import ... #定义执行测试任务的方法:登录...
  • 此时进入python环境,可以直接输入代码执行代码,退出使用exit()命令即可 以下步骤是进入到项目的虚拟环境(python脚本才能使用虚拟环境下的所有包),切换到相应目录运行python脚本: 打开CMD窗口或者Anaconda ...
  • linux 脚本启动和停止node

    千次阅读 2019-03-08 16:01:32
    一般我们停止node的进程,都是查端口,然后找到经常pid,最后kill掉,每次操作比较麻烦,所以自己写了一个脚本执行脚本如下:node-demo.sh #判断输入的第一个变量是否是stop if [ "$1"x = "...
  • 如果您需要检测何时其他进程要求您的脚本停止,则这是您要查找的库。 在内部,我们使用 PHP函数,因此,如果您想创建自己的代码来检测此信号,请阅读此函数的文档,这是一个不错的开始。 正在安装 执行composer ...
  • 一触即发app是手机上极其强大的一款免root的脚本辅助软件,堪称一键秒杀脚本精灵,除自动化、运行、管理外,还提供了脚本制作文字教程/视频教程,学习社区和图色处理、定时执行、王者荣耀、变量等命令参数和多点找色...
  • 本文将介绍PowerShell如何依靠全局错误处理检测捕捉并处理执行脚本或代码引起的错误,要注意的是其中的例子包含错误处理方法和调试信息。本文还将举例说明如何在反常条件下、错误的输入数据,以及隐含的错误情况下...
  • 一、脚本执行过程中的控制之前的内容中,运行编写好的脚本时都是在命令行上直接确定运行的,并且运行脚本是实时的,这并不是脚本唯一的运行方式,下面的内容是脚本的其他运行方式。例如在Linux系统中如何控制脚本...
  • mac定时任务执行shell脚本运行jar包

    千次阅读 2019-07-01 16:44:12
    1.背景:想用定时任务执行某个脚本然后实现定时发送钉钉机器人消息; 2.构思:楼主是做Android开发的,由于不太懂phyon脚本,便想着用java来构建jar包并用shell脚本执行,然后用系统自带的定时任务执行shell脚本 ...
  • 脚本服务化目的:python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据。但是网上买的服务器会不定时进行维护,服务器会被重启。这样我们的爬虫服务就无法运行。这个时候我们...
  • 16控制脚本

    2021-01-09 06:49:45
    这些控制方法包括向脚本发送信号、修改脚本的优先级以及在脚本运行时切换到运行模式。本章将会对逐一介绍这些方法。 一.处理信号  Linux利用信号与运行在系统中的进程进行通信。第4章介绍了不同的Linux信号以及...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,621
精华内容 59,048
关键字:

停止运行脚本的处理方法