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

魔术师94

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

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

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

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

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

提前致谢!

西古萨

您可以使用trap以下命令设置信号处理程序

trap 'myFunction arg1 arg2 ...' SIGINT;

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

#!/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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 eval 由脚本启动的子进程在 ctrl+c 上不会中断

来自分类Dev

如何使用Ctrl + C杀死在Bash脚本中启动的所有后台进程?

来自分类Dev

在bash脚本中使用Ctrl-C陷阱终止ssh

来自分类Dev

Bash脚本不会以Ctrl + C终止

来自分类Dev

使用Ctrl-C终止程序而不终止父脚本

来自分类Dev

使用Ctrl-C终止程序而不终止父脚本

来自分类Dev

Ctrl + C进程终止而不终止终端

来自分类Dev

使用bash脚本在屏幕上附加,分离和终止进程

来自分类Dev

无法使用Ctrl + c终止Shell命令

来自分类Dev

通过批处理脚本启动的PID终止进程(避免使用其他同名进程)

来自分类Dev

在Ctrl + C上从bash脚本中断子进程

来自分类Dev

为什么选择ctrl + c终止进程?

来自分类Dev

使用golang在Windows和Linux中捕获ctrl + c或任何其他进程终止信号

来自分类Dev

当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

来自分类Dev

当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

来自分类Dev

当CPU /内存使用率过高时,Bash脚本会自动终止进程

来自分类Dev

如何使用脚本自动终止进程?

来自分类Dev

陷阱'Ctrl + c'用于bash脚本,但不用于在此脚本中打开的进程

来自分类Dev

使用Ctrl + D和Ctrl + C终止cat命令有什么区别?

来自分类Dev

使用“ ctrl c”终止程序时,程序不会停止

来自分类Dev

zsh-使用ctrl + c,ctrl + x,ctrl + v优化复制,剪切和粘贴

来自分类Dev

使用读取的Bash脚本需要停止在Ctrl + D上执行

来自分类Dev

Ctrl + C无法终止进程时该怎么办?

来自分类Dev

如何终止类似于ctrl-c的python进程?

来自分类Dev

使用Bash自动终止匹配进程

来自分类Dev

防止 CTRL+C 被发送到从 Bash 脚本调用的进程

来自分类Dev

在C中多次使用Ctrl + C

来自分类Dev

我无法使用Ctrl + C停止木偶

来自分类Dev

如何防止用户使用ctrl-c停止脚本?

Related 相关文章

  1. 1

    使用 eval 由脚本启动的子进程在 ctrl+c 上不会中断

  2. 2

    如何使用Ctrl + C杀死在Bash脚本中启动的所有后台进程?

  3. 3

    在bash脚本中使用Ctrl-C陷阱终止ssh

  4. 4

    Bash脚本不会以Ctrl + C终止

  5. 5

    使用Ctrl-C终止程序而不终止父脚本

  6. 6

    使用Ctrl-C终止程序而不终止父脚本

  7. 7

    Ctrl + C进程终止而不终止终端

  8. 8

    使用bash脚本在屏幕上附加,分离和终止进程

  9. 9

    无法使用Ctrl + c终止Shell命令

  10. 10

    通过批处理脚本启动的PID终止进程(避免使用其他同名进程)

  11. 11

    在Ctrl + C上从bash脚本中断子进程

  12. 12

    为什么选择ctrl + c终止进程?

  13. 13

    使用golang在Windows和Linux中捕获ctrl + c或任何其他进程终止信号

  14. 14

    当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

  15. 15

    当我使用Ctrl + c终止Python脚本时,内部会发生什么情况?

  16. 16

    当CPU /内存使用率过高时,Bash脚本会自动终止进程

  17. 17

    如何使用脚本自动终止进程?

  18. 18

    陷阱'Ctrl + c'用于bash脚本,但不用于在此脚本中打开的进程

  19. 19

    使用Ctrl + D和Ctrl + C终止cat命令有什么区别?

  20. 20

    使用“ ctrl c”终止程序时,程序不会停止

  21. 21

    zsh-使用ctrl + c,ctrl + x,ctrl + v优化复制,剪切和粘贴

  22. 22

    使用读取的Bash脚本需要停止在Ctrl + D上执行

  23. 23

    Ctrl + C无法终止进程时该怎么办?

  24. 24

    如何终止类似于ctrl-c的python进程?

  25. 25

    使用Bash自动终止匹配进程

  26. 26

    防止 CTRL+C 被发送到从 Bash 脚本调用的进程

  27. 27

    在C中多次使用Ctrl + C

  28. 28

    我无法使用Ctrl + C停止木偶

  29. 29

    如何防止用户使用ctrl-c停止脚本?

热门标签

归档