【问题标题】:Is it possible to programmatically set the first 7 bits of $?是否可以以编程方式设置 $ 的前 7 位?
【发布时间】:2015-12-18 11:34:06
【问题描述】:

当我实现一个子进程来处理信号时,比如SIGTERMSIGUSR1 使用自定义信号处理程序可以优雅地退出子进程,是否可以让父进程知道哪个信号导致退出? $? 的前 7 位设置为指示子进程死亡的信号。但是我不确定我们如何以编程方式设置它。调用exit() 只会设置($? >> 8) 的值。

【问题讨论】:

  • 我想说不,这是不可能的,因为涉及到执行层,但我不认为我可以支持这个断言。

标签: perl


【解决方案1】:

我的方法是:在信号处理程序中,卸载自定义信号处理程序并将信号操作更改为终止。然后在主控制流程中,包含重新引发相同信号的逻辑。

【讨论】:

    【解决方案2】:

    它表示杀死孩子的信号,因此孩子必须向自己发送信号。

    $ perl -E'system($^X, -e => q{kill TERM => $$}); say $?;'
    15
    

    如果您有信号处理程序,请先取消设置。

    $SIG{TERM} = 'DEFAULT';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      相关资源
      最近更新 更多