运行来自终端的进程阻塞信号

时间:2010-11-04 00:28:25

标签: ruby process signals

如果我从终端运行ruby脚本并使用system从其中运行其他进程并按Ctrl + C,那么INT将被发送到另一个进程,如何让ruby进程处理它和另一个进程过程根本没有得到它?

示例:

trap('INT'){ puts 'Wait a bit' }
system 'sleep 100'

如果按Ctrl + C,此脚本将立即退出并且不会打印任何内容:INT将仅发送到睡眠状态,因此它将退出并且脚本将完成。

2 个答案:

答案 0 :(得分:0)

你可能在谈论分叉,而不是使用系统。编程Ruby中的Independent Children部分可能有所帮助。

或者,您可能正在讨论将子项与父项完全分离作为独立应用程序运行,以便在父项退出子项时继续运行,如httpd服务器等。我没有尝试过,但是Daemons听起来很有效。

答案 1 :(得分:0)

您可以使用INT捕获trap("INT") { exit }并退出。像格雷格一样,不确定这是否是你想要的,但它可能是值得关注的东西。