本质上发生的事情是我正在有限的指令集框架上运行(以在嵌入式设备上运行)。这个想法很简单。

我称一个脚本,它包含两个文件:

  • 文件A:start_up-调用无限循环
  • 文件B:background_while-再次重复
  • 一个过程

    文件A的内容:
    #!/bin/sh
    sh background_while&
    

    文件B的内容:
    #!/bin/sh
    
    while true
    do
     #some commands
     sleep 5
    done
    

    我想终止在后台调用的此过程。有人可以显示使用键盘中断如何最好地做到这一点吗?

    最佳答案

    如果在调用scriptB作为后台之后scriptA刚结束,那么您将无法继续等待键盘中断。因此,除了立即结束scriptA之外,您还可以使用紧闭循环并等待信号,然后使用trap终止后台进程。

    就像是:

    脚本

    #!/bin/bash
    
    function kill_background(){
       kill ${myPid}
    }
    
    trap kill_background SIGINT
    
    bash ./scriptB.sh &
    myPid=$!
    
    wait
    

    您的scriptB将是相同的。 $!获取最后执行的命令的pid(您的scriptB),而wait使scriptA等待所有后台进程返回。 trap将捕获中断信号并杀死您的scriptB。

    09-12 10:59