【问题标题】:Run process blocking signals from terminal从终端运行进程阻塞信号
【发布时间】:2010-11-04 00:28:25
【问题描述】:

如果我从终端运行 ruby​​ 脚本并使用system 运行其他进程并按 Ctrl+C,则 INT 被发送到其他进程,我怎样才能让 ruby​​ 进程来处理它而其他进程不想要得到它吗?

例子:

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

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

【问题讨论】:

    标签: ruby process signals


    【解决方案1】:

    您可能在谈论分叉,而不是使用系统。 Programming Ruby 中关于Independent Children 的部分可能会有所帮助。

    或者,您可能正在谈论将子进程作为独立应用程序与父进程完全分离运行,这样如果父进程退出,子进程就会继续运行,例如 httpd 服务器等。我还没有尝试过,但Daemons 听起来效果不错。

    【讨论】:

      【解决方案2】:

      您可以使用trap("INT") { exit } 捕获INT 并退出。和 Greg 一样,不确定这是否是您想要的,但可能值得研究一下。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-26
        • 2013-11-29
        • 1970-01-01
        • 2014-02-09
        • 1970-01-01
        相关资源
        最近更新 更多