gpt4 book ai didi

perl - 如何将 fork 子进程中的 croak 抛出的异常传播到父进程/前台进程?

转载 作者:行者123 更新时间:2023-12-04 06:52:21 26 4
gpt4 key购买 nike

通过 croak 抛出异常在 fork 的子进程中似乎像后台进程一样打印错误。也就是说,它破坏了 shell 提示符。

如果我 die而不是 croak ,错误信息作为前台进程弹出。我试图找出原因在 Carp 中没有任何运气的文档。

这就是我的意思。 croak版本:

$ perl Wrapper.pm
$ error: ... does not exist at Wrapper.pm line 624
die版本:
$ perl Wrapper.pm
error: ... does not exist at Wrapper.pm line 515.

我 try catch fork和打印 $@到 STDERR 并退出,但这没有效果。有任何想法吗?我希望能够使用 croak在这种特殊情况下。

虽然我的代码有点复杂,但您可以通过以下方式重现此行为:
$ perl -MCarp -e 'unless (fork) {croak "child"}'
$ child at -e line 1
<- cursor blinking here. Pressing enter gives me a new prompt:
$

$ perl -e 'unless (fork) {die "child"}'
child at -e line 1.
$

已解决: cjm got it :
$ perl -e '$SIG{__DIE__} = sub {sleep 1}; unless (fork) {die "child"}'
$ child at -e line 1.

谢谢您的帮助!

最佳答案

我很确定这只是一个时间问题。 die version 稍微快一点,所以它有更好的机会在 shell 可以打印下一个提示之前输出错误消息。当我尝试运行您的示例时,croak version 通常在提示之后打印,但偶尔会在提示之前打印。 die版本非常一致地出现在提示之前。

关于perl - 如何将 fork 子进程中的 croak 抛出的异常传播到父进程/前台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2947727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com