如何使可能挂起的分叉进程超时?

2024-04-22

我正在编写一个 Perl 脚本,它将写入一些输入并将这些输入发送到外部程序。该程序挂起的可能性虽小但非零,我想将其超时:

my $pid = fork;
if ($pid > 0){
    eval{
        local $SIG{ALRM} = sub { die "TIMEOUT!"};
        alarm $num_secs_to_timeout;
        waitpid($pid, 0);
        alarm 0;
    };
}
elsif ($pid == 0){
    exec('echo blahblah | program_of_interest');
    exit(0);
}

就目前情况而言,在 $num_secs_to_timeout 之后,program_of_interest 仍然存在。我试图在匿名子例程中杀死它$SIG{ALRM}如下:

local $SIG{ALRM} = sub{kill 9, $pid; die "TIMEOUT!"}

但这没有任何作用。 program_of_interest 仍然存在。我该如何杀死这个进程?


我能够通过以下方式成功终止我的 exec()ed 进程杀死进程组,如问题答案所示在perl中,当使用 open 创建子项时杀死子项及其子项 https://stackoverflow.com/questions/1675750/in-perl-killing-child-and-its-children-when-child-was-created-using-open/1675968#1675968。我修改了我的代码如下:

my $pid = fork;
if ($pid > 0){
    eval{
        local $SIG{ALRM} = sub {kill 9, -$PID; die "TIMEOUT!"};
        alarm $num_secs_to_timeout;
        waitpid($pid, 0);
        alarm 0;
    };
}
elsif ($pid == 0){
    setpgrp(0,0);
    exec('echo blahblah | program_of_interest');
    exit(0);
}

超时后,program_of_interest被成功杀死。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使可能挂起的分叉进程超时? 的相关文章

  • Pipe、Fork 和 Exec - 父进程和子进程之间的双向通信

    我的操作系统类中的作业要求我通过在同一程序上递归调用 exec 来构建二进制进程树 目标是将某些任意任务拆分为单独的进程 父级应与子级通信 子级应仅通过无名管道与父级通信 这个想法是 父级向每个子级发送一半的工作 并且递归地继续 直到满足基
  • 同一个字符可以有 2 种不同的 UTF-8 编码吗?

    我正在编写一个应用程序 需要将其输入从 UTF 8 转码为 ISO 8859 1 Latin 1 一切正常 除了有时我会得到一些变音字符的奇怪编码 例如 带有 2 个点的拉丁语 1 E 0xEB 通常为 UTF 8 0xC3 0xAB 但有
  • 找到与另一个子集和匹配的最小子集和

    我有一个现实世界的问题 不是家庭作业 需要找到集合 A 的子集之和等于其他集合 B 的子集之和 一个非常相似的问题 有一个有用的答案is here https stackoverflow com questions 443712 algor
  • 如何以 OO 风格打开管道?

    我用新风格重写了旧代码 如下所示 old style open FD file new style fh IO File gt new file r 文件没问题 但我不知道如何打开管道 read from pipes open PIPE s
  • 如何提高非持久 CGI 进程中的 Moose 性能?

    Moose http search cpan org dist Moose 是一个很棒的对象框架 问题在于 连同它的依赖项一起 它是very大的 我们的分析表明 在我们的平台上 仅加载 Moose 就会在非持久性 CGI 应用程序脚本上产生
  • 如何在 Perl 中将纪元时间转换为正常时间?

    我正在尝试编写一个 Perl 脚本来解析日志 其中每行的第二个值是日期 该脚本接受三个参数 输入日志文件 开始时间和结束时间 开始时间和结束时间用于解析出每行上位于这两个时间之间的特定值 但为了正确运行这个 我将开始和结束时间转换为纪元时间
  • Perl 初学者:如何查找/替换文件中的 ASCII 字符?

    我对 Perl 完全陌生 我认为这将是解决我的简单任务的最佳语言 我需要将二进制文件转换为可读的文件 并且需要查找和替换字符串 例如 x00 x39 into x09 选项卡 或类似的东西 从 bash 开始 我从以下内容开始 效果很好 p
  • 首选的跨平台 IPC Perl 模块是什么?

    我想创建一个简单的 IO 对象 它代表一个向另一个程序打开的管道 我可以在应用程序运行时定期写入另一个程序的 STDIN 我希望它是防弹的 因为它可以捕获所有错误 并且是跨平台的 我能找到的最佳选择是 open sub io read lo
  • Linux 上的最大子进程数

    下面的代码将产生尽可能多的子级 自己不会进一步fork 一旦父进程退出就会变成僵尸 父进程将产生多少个子进程 int main int argc char arg while fork gt 0 子进程的数量可以通过以下方式限制设置限制 2
  • DBI:在 eval 中引发错误

    这个问题参考了池上的评论 But if you re going to put an eval around every statement just use RaiseError gt 0 in this thread https sta
  • 如何触发并忘记子进程?

    我有一个长时间运行的进程 我需要它来启动另一个进程 该进程也会运行很长一段时间 我只需要开始它 然后就完全忘记它 我设法通过从 Ruby 编程 一书中获取一些代码来完成我需要的操作 但我想找到最好 正确的方法 并了解发生了什么 这是我最初得
  • 在 Perl 中,如何从父进程向子进程发送消息(或信号),反之亦然?

    我正在编写一个管理多进程的程序 这就是我所做的 而且效果很好 但现在 我想将消息从子进程发送到父进程 反之亦然 从父进程到子进程 你知道最好的方法吗 你知道我所做的是否是我想要的正确方法 从子进程到父进程发送消息 信号或共享内存 反之亦然
  • 更改子进程中的 iostream

    现在 我正在开发一个项目 其中我需要启动一个子进程来使用 C 在 Linux 中执行一个新程序 并且我需要重定向标准输入和输出 就像在 C 中一样 它们是cin and cout 到一个文件 这意味着在子进程中 标准输入和输出都是文件 子进
  • Perl 的核心库是如何管理的?

    根据我的理解 Perl 传统上只包含核心功能 人们安装额外的库来完成各种有用的 有时是非常基本的 事情 但在某些时候 Perl 默认附带了 核心库 因此您可以使用这些库而无需安装它们 来自Python 我很好奇这是如何管理的 具体来说 图书
  • STDOUT->autoflush(1) 在 Perl 中做什么?

    我找到了有关 Perl 中自动刷新的各种信息 但找不到任何提及格式完全相同的行 STDOUT gt autoflush 1 这包含在我正在分析的程序中 我想更好地了解它的作用 程序开头还有这样一段话 use IO Handle 我认为这可能
  • WWW::Mechanize::Firefox - 如何打开多个选项卡

    我想打开两个单独的选项卡并在 Firefox 中保持打开状态 我在用WWW Mechanize Firefox 请找到下面的代码 usr bin perl w use strict use WWW Mechanize Firefox my
  • 如何在 Perl 中以函数式风格进行编码?

    你如何 have a sub返回一个sub or 将文本作为代码执行 in Perl 另外 如何拥有匿名函数存储状态 子返回子作为coderef example 1 return a sub that is defined inline s
  • 使用 perl 比较两个 Unicode 字符串

    当我运行以下代码时 它不会进入 在此处执行某些操作 部分 my a P 3 lt 1 my b P 3 lt 1 if a ne b do something here 还有另一种方法可以将 Unicode 字符串与 perl 进行比较吗
  • 多个与单个 Catalyst 应用程序

    我有多个作为 FCGI 运行的 Catalyst 应用程序 将它们整合为具有多个控制器的单个控制器是否有好处 Thanks Simone 内存 大概吧 我认为每台服务器至少要保留 15MB 左右 因此如果您在 3 台服务器上运行 3 个应用
  • Perl 中字符串之间的字符匹配计数

    我有一个字符串 例如字符串 1 需要与另一个字符串 字符串 2 匹配 两个字符串的长度相同并且不区分大小写 我想打印两个字符串之间的字符匹配数 E g String 1 stranger String 2 strangem Match co

随机推荐

  • Swift:以编程方式导航到 ViewController 并传递数据

    我最近开始学习swift 到目前为止还不错 目前 我在尝试在视图控制器之间传递数据时遇到问题 我设法弄清楚如何使用导航控制器以编程方式在两个视图控制器之间导航 唯一的问题是现在我很难弄清楚如何将用户输入的三个字符串 对于 json api
  • 我怎样才能让两个“发展流”(分支?)相互跟踪,同时在特定方面保持不同?

    BRIEF 我想让两个 或更多 开发流 环境相互跟踪 在两个方向上发送彼此之间的更改 而不完全收敛 同时保留某些关键的 本质的差异 细节 一个具体的例子 下面是一个具体的例子 我对我的主目录 glew home 进行版本控制已有 28 年了
  • Angularjs:监听指令中的模型更改

    我试图找出当模型在指令中更新时如何监听 eventEditor directive myAmount function return restrict A link function scope elem attrs scope watch
  • opencv中以下代码行的含义是什么?

    该代码行的含义是什么以及如何将此代码转换为 javacv gray Scalar all 255 这是与此代码行相关的完整代码 Mat src imread in jpg gray cvtColor src gray CV BGR2GRAY
  • 从 iFrame 中卸载/删除内容

    是否有办法卸载已在 iframe 内加载的页面 如果可能的话 我不想将 iframe src 更改为空白页面 我基本上正在寻找可以做这样的事情的东西 frameID attr src 只是该代码似乎没有清除先前加载的页面 有没有 unloa
  • 设置 Let's encrypt with Go - 握手错误

    我正在尝试设置让我们在用 Go 编写的负载均衡器上进行加密 我尝试了自动和手动设置 但总是出错 该域正确指向我们的服务器 Digital Ocean 我什至可以从浏览器打开该网站而不会出现错误 而且 ssl 检查报告该域上没有错误 事实是
  • CSS 动画面临的问题

    我正在尝试创建一个几秒钟后会淡入视图的文本 但我遇到了问题 淡入视图工作正常 但文本在显示后几乎立即消失 其次 我需要这个动画以延迟的方式工作 但是当我设置延迟时 它似乎没有任何区别 早些时候 延迟工作得很好 为什么动画显示后不久就消失了
  • 使用 Spring Security 和 CAS 单点注销

    使用纯 Spring Java 配置 我在让 Spring 和 CAS 执行单点登录时遇到问题 我使用以下配置进行单点登录 我使用一个简单的 JSP 页面对 url 进行表单 POSThttps nginx shane com app lo
  • 线程 1:信号 SIGABRT libc++abi.dylib:以 NSException 类型的未捕获异常终止(lldb)

    我本周开始使用 swift 编程 并尝试在我的应用程序中制作一个简单的导航栏 这不是我第一次遇到这个错误 并且不知道可能缺少什么 如果我没记错的话 我正确地连接了从用户界面到代码的所有内容 但输出显示 libc abi dylib term
  • Chrome 开发者工具 - 浏览器大小?

    我正在使用 Chrome 开发者工具并尝试获取浏览器宽度 以 px 为单位 谷歌最近推出了开发者工具的更新 在这些更新之前 缩放开发者工具时 屏幕高度和宽度通常会出现在网站预览的右上角 但现在无法找出屏幕尺寸 示例如下 现在如何通过 Chr
  • 如何在 CentOS 7 上的 PHP 7.2 上安装 zipArchive?

    我正在尝试在具有最新 WordPress 的 nginx Web 服务器上安装 ziparchive 和 domdocument 为了运行 Avada 主题 我需要在本地 CentOS 7 测试服务器上安装这两个主题 我在过去三天里一直在寻
  • 样式表的条件加载

    我有一个与客户合作的网站 每个客户端都可以有自己的主题 当某个客户端的用户登录时 必须加载公司主题 在 application css scss 中 我为每个公司都有这样一行 import theme x css scss import t
  • 如何获取两个任意变更集之间修改的文件列表?

    我唯一的猜测是这样可怕的事情 files where something has been added hg diff r AA r BB grep cut f1 cut d f2 gt tmp ka files where somethi
  • 在ggplot2中绘制两个面之间的线

    如何在两个面之间绘制多条线 我尝试通过在顶部图表的最小值处绘制点来实现此目的 但它们不在两个方面之间 见下图 到目前为止 这是我的代码 t lt seq 1 1000 y1 lt rexp 1000 y2 lt cumsum y1 z lt
  • Robocopy 将文件复制到远程计算机

    我正在尝试编写一个 robocopy 命令将文件从本地计算机复制到任何一台部署服务器 ROBOCOPY MyService bin release remote computer C services myservice MIR 我收到这个
  • 将 Moment 与 Angular 和 TypeScript 结合使用

    我是 TypeScript 的新手 自从我进行任何认真的 JavaScript 开发以来已经有一段时间了 所以我可能会遗漏一些明显的东西 我正在尝试在带有 TypeScript 的 Angular 1 应用程序中使用 Moment 我正在使
  • 为什么抽象方法不能同步?

    我正在读一本来自 CodeRanch 的线程 http www coderanch com t 455033 java programmer SCJP certification abstract synchronized methods
  • 从后面的代码设置文本框的字体

    如何设置a的字体TextBox from a string在后面的代码中 example txtEditor FontFamily Consolas txtEditor FontFamily new FontFamily Consolas
  • Android Listview添加相同的项目

    我正在开发一个 Android 应用程序 并且正在使用 Android ListView 我从网络服务获取数据并将它们填充到数组列表中 它的大小是 37 然后我尝试用 Arraylist 填充列表视图 但它总是得到相同的元素 最后一个 下面
  • 如何使可能挂起的分叉进程超时?

    我正在编写一个 Perl 脚本 它将写入一些输入并将这些输入发送到外部程序 该程序挂起的可能性虽小但非零 我想将其超时 my pid fork if pid gt 0 eval local SIG ALRM sub die TIMEOUT