perl - 如何禁用子进程中的 END block ?

标签 perl fork

我经常在也有 END { ... } block 的程序中使用 fork:

...
END { &some_cleanup_code }
...
my $pid = fork();
if (defined($pid) && $pid==0) {
    &run_child_code;
    exit 0;
}

子进程在退出时执行END {} block ,但通常我不希望这种情况发生。有没有办法阻止子进程在退出时调用 END block ?除此之外,有没有办法让程序“知道”它是一个子进程,所以我可以说类似

END { unless (i_am_a_child_process()) { &some_cleanup_code } }

最佳答案

我认为没有任何方法可以阻止 END block 在 fork 进程中运行,但这应该可以让您检测到它:

my $original_pid; BEGIN { $original_pid = $$ }

... # Program goes here

END { do_cleanup() if $$ == $original_pid }

关于perl - 如何禁用子进程中的 END block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4307482/

相关文章:

perl - 如何使用 Selenium::Remote::Driver Perl 包通过 Open Windows 在测试中上传文件

perl - 理解推送到哈希和 ||=[] 构造。 (在boilerplate.t 中生成)

html - Perl:从字符串中删除剩余的 anchor 标记

perl - 如何将管道设置为 O_NONBLOCK perl

c - sigsuspend() 不对信号作出 react

perl - 如何在 Perl 中平方一个数字?

perl - 尝试在 Windows 7 上安装 MinGW 和 Tk for Perl

c - 确保 PID 指的是正确的过程

c++ - fork 并执行许多不同的进程,并从每个进程中获取结果

c - fork() 的异步信号安全