gpt4 book ai didi

linux - 使用 CTRL-C 终止由 bash 脚本启动的进程

转载 作者:IT王子 更新时间:2023-10-29 01:25:58 26 4
gpt4 key购买 nike

我在终止 bash 脚本中进程的执行时遇到问题。

基本上我的脚本执行以下操作:

  1. 发出一些启动命令
  2. 启动一个等待CTRL+C停止的程序
  3. 对程序检索到的数据进行一些后处理

我的问题是,当我按下 CTRL+C 时,整个脚本都会终止,而不仅仅是“内部”程序。

我已经看到一些执行此操作的脚本,这就是我认为这是可能的原因。

提前致谢!

最佳答案

您可以使用 trap 设置信号处理程序:

trap 'myFunction arg1 arg2 ...' SIGINT;

我建议让您的脚本总体上可中止,您可以使用一个简单的 bool 值来做到这一点:

#!/bin/bash

# define signal handler and its variable
allowAbort=true;
myInterruptHandler()
{
if $allowAbort; then
exit 1;
fi;
}

# register signal handler
trap myInterruptHandler SIGINT;

# some commands...

# before calling the inner program,
# disable the abortability of the script
allowAbort=false;
# now call your program
./my-inner-program
# and now make the script abortable again
allowAbort=true;

# some more commands...

为了减少 allowAbort 搞砸的可能性,或者只是为了让它更干净一点,您可以定义一个包装函数来为您完成这项工作:

#!/bin/bash

# define signal handler and its variable
allowAbort=true;
myInterruptHandler()
{
if $allowAbort; then
exit 1;
fi;
}

# register signal handler
trap myInterruptHandler SIGINT;

# wrapper
wrapInterruptable()
{
# disable the abortability of the script
allowAbort=false;
# run the passed arguments 1:1
"$@";
# save the returned value
local ret=$?;
# make the script abortable again
allowAbort=true;
# and return
return "$ret";
}

# call your program
wrapInterruptable ./my-inner-program

关于linux - 使用 CTRL-C 终止由 bash 脚本启动的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com