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

il_mix

我有一个bash脚本,可以evtest两次启动一个外部程序()。

#!/bin/bash

echo "Test buttons on keyboard 1"
evtest /dev/input/event1

echo "Test buttons on keyboard 2"
evtest /dev/input/event2

据我所知,evtest只能通过Ctrl-C终止。问题在于这也会终止父脚本。这样,对evtest的第二次调用将永远不会发生。

如何在evtest不关闭脚本的情况下关闭第一个脚本,以便第二个脚本evtest真正运行?

谢谢!

PS:对于一个想问“为什么不evtest手动运行而不使用脚本?”的人,答案是该脚本包含了进一步的半自动硬件调试测试,因此启动脚本并在不进行任何操作的情况下更加方便需要运行其他命令。

马丁·图尔诺伊(Martin Tournoij)

您可以使用该trap命令来“捕获”信号。这等效于C和大多数其他编程语言中的signal()orsigaction()调用的外壳程序,以捕获信号。

陷阱被重置为子shell,因此,evtest仍然会对(通常是通过退出)SIGINT发送信号^C起作用,但是父进程(例如,shell脚本)则不会。

简单的例子:

#!/bin/sh

# Run a command command on signal 2 (SIGINT, which is what ^C sends)
sigint() {
    echo "Killed subshell!"
}
trap sigint 2

# Or use the no-op command for no output
#trap : 2

echo "Test buttons on keyboard 1"
sleep 500

echo "Test buttons on keyboard 2"
sleep 500

还有一个变体,它仍然允许您通过^C每秒按下两次来退出主程序

last=0
allow_quit() {
    [ $(date +%s) -lt $(( $last + 1 )) ] && exit
    last=$(date +%s)
}
trap allow_quit 2

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Bash脚本不会以Ctrl + C终止

来自分类Dev

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

来自分类Dev

带循环的程序不会以CTRL + C终止

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Ctrl-C并不总是终止shell脚本

来自分类Dev

在Ctrl + C上,终止当前命令,但继续执行脚本

来自分类Dev

按ctrl + c后脚本不会终止

来自分类Dev

使用gprof剖析非终止C程序

来自分类Dev

Ctrl + C不会终止终端(osx bash)程序的“屏幕”

来自分类Dev

C++:ctrl+d 终止程序 (ubuntu)

来自分类Dev

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

来自分类Dev

无法通过 Ctrl+C 或 Ctrl+Break 终止 Python 脚本

来自分类Dev

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

来自分类Dev

按下CTRL-C时如何防止C程序终止?

来自分类Dev

在C中按“ Ctrl + C”时如何防止控制台应用程序终止?

来自分类Dev

使用Ctrl-D字符终止输入不起作用

来自分类Dev

终止简单的python服务器不会使用ctrl + C关闭

来自分类Dev

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

来自分类Dev

在不使用ctrl + c的情况下调用该命令后如何立即终止该命令?

来自分类Dev

如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

来自分类Dev

如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

来自分类Dev

如何在Linux命令行中终止程序(ctrl + c和ctrl + z不起作用)?

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

    Bash脚本不会以Ctrl + C终止

  7. 7

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

  8. 8

    带循环的程序不会以CTRL + C终止

  9. 9

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

  10. 10

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

  11. 11

    Ctrl-C并不总是终止shell脚本

  12. 12

    在Ctrl + C上,终止当前命令,但继续执行脚本

  13. 13

    按ctrl + c后脚本不会终止

  14. 14

    使用gprof剖析非终止C程序

  15. 15

    Ctrl + C不会终止终端(osx bash)程序的“屏幕”

  16. 16

    C++:ctrl+d 终止程序 (ubuntu)

  17. 17

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

  18. 18

    无法通过 Ctrl+C 或 Ctrl+Break 终止 Python 脚本

  19. 19

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

  20. 20

    按下CTRL-C时如何防止C程序终止?

  21. 21

    在C中按“ Ctrl + C”时如何防止控制台应用程序终止?

  22. 22

    使用Ctrl-D字符终止输入不起作用

  23. 23

    终止简单的python服务器不会使用ctrl + C关闭

  24. 24

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

  25. 25

    在不使用ctrl + c的情况下调用该命令后如何立即终止该命令?

  26. 26

    如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

  27. 27

    如果我的程序通过CTRL-C终止,为什么使用fprintf输出的字符串最终没有写入输出文件?

  28. 28

    如何在Linux命令行中终止程序(ctrl + c和ctrl + z不起作用)?

  29. 29

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

热门标签

归档