在 Perl 中启动非等待后台进程

2024-01-29

我有一个 Perl 脚本,需要在后台启动另一个进程并退出,而不等待其他脚本完成。 StackOverflow 上有很多线程介绍如何在 Perl 中等待或如何不等待其他编程语言,但我似乎找不到 Perl 的正确答案。

我已经阅读了相当多的内容,并认为我正在做正确的事情,但我的尝试似乎都没有正常工作。以下是我迄今为止尝试过的所有变体,但均无济于事:

system(qq|perl /util/script.pl $id|);

system(qq|perl /util/script.pl $id &|);

exec(qq|perl /util/script.pl $id|);

exec(qq|perl /util/script.pl $id &|);

对于每一个进程,父进程都会继续等待子进程完成后再退出。请让我知道我做错了什么以及分叉后台进程的正确方法。

在此先感谢您的帮助!


帮助调试的完整代码。请注意,API->Function() 调用是面向对象的模块,我们的代码库用于数据库交互等的特定函数:

sub Add {
    my $self = shift;
    my $domain = shift;

    if(!$self->IsValid($domain)) { return; }

    my $SQL = qq| insert into domains set added=NOW(),domain=| . API->Database->Quote($domain);
    my $sth = API->DatabaseQuery($SQL);

    $SQL = qq| select last_insert_id() |;
    $sth = API->DatabaseQuery($SQL);
    my $id = $sth->fetchrow_array();

    my $command = qq|perl /home/siteuser/util/new.pl $id &|;
    system($command);

    return {'id'=>$id,'domain'=>$domain};
}

第一个旨在以这种方式工作 -system执行命令并完成以使其结束。

最后两个也是这样设计的——exec专门设计为永不返回。它基本上用子进程替换了父进程。

然而,第二个应该可以解决问题:从system调用的是 shell,它会给出要执行的字符串。由于字符串以“&”结尾,这意味着 shell 将以后台进程的形式启动您的命令,并在启动后完成自己的执行。

您能否发布更多代码来说明#2 如何不起作用?

另外,看看如果尝试反引号或 qx 会发生什么:

my $output = qx|perl /util/script.pl $id &|;
print $output;

另外,作为减少未知数的一种方法,您能否运行以下命令并告诉我打印的内容:

my $output = qx|(echo "AAAAAAA"; /bin/date; sleep 5; /bin/date; echo "BBBBBBB") &|;
print $output;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Perl 中启动非等待后台进程 的相关文章

随机推荐

  • 阿拉伯文本在 web 应用程序中显示,无需更改数据库

    当用户输入阿拉伯语名称和密码时 我应该检索该用户的数据 在java中 我使用utf 8编码 我应该从数据库中以阿拉伯文本的形式检索数据 我使用的数据库是 sql server 2005 并且该列设置为 varchar 而不是 nvarcha
  • 如何使 StdIn.isEmpty() 返回 true?

    我正在使用算法 Coursera 算法课程中提供的普林斯顿库中的 StdIn isEmpty 方法 但对其工作原理感到困惑 我有声明 while StdIn isEmpty 附带一些读取用户输入的代码 但我似乎无法跳出循环 根据我的理解 如
  • python sqlite 插入命名参数或 null

    我正在尝试使用命名参数将字典中的数据插入到数据库中 我用一个简单的 SQL 语句来完成这个工作 例如 SQL INSERT INTO status location arrival departure VALUES location arr
  • 处理大型数组而不会出现运行时错误

    当我使用大小为 10 5 10 5 的数组 例如int a 100000 100000 由于该数组消耗更多内存 这可能是运行时错误的原因之一 我应该如何声明这个数组 二维数组 例如int a 100000 100000 这样我就可以应对问题
  • 使用“git filter-branch”来更正最后 N 次提交中的提交者日期?

    我最近需要使用 git am 向我的存储库应用 16 个补丁 并且我小心翼翼地为每个补丁使用 committer date is author date 然而 我还需要调整每个 amd 补丁的提交消息 并且在完成所有 16 个补丁之后 我发
  • MPI - 异步广播/收集

    我有一个项目 需要 n 个进程才能工作 直到问题得到解决 每个从属进程执行相同的代码 当某种情况出现时 该进程需要以非阻塞的方式通知所有其他进程 其他进程也需要以非阻塞的方式接收这个消息 有没有办法不用线程单独的循环 我已经有一段时间没有使
  • 如何在 Drools 中参数化后时间约束?

    我有一个与以下示例非常相似的规则 rule correlate orders when bo BuyOrderEvent id id ae AckEvent id id this after 0 10s bo then do somethi
  • 为什么 PHP Composer 这么慢?

    Why is PHP 作曲家 https en wikipedia org wiki Composer software 当我所做的只是初始化一个零依赖项的项目时 速度这么慢 以下是我运行的命令 composer init composer
  • 为什么闭包比全局变量更能保存变量?

    我了解闭包在 JavaScript 中的工作原理 但我的问题是为什么要费尽心思创建闭包来保存变量 不能把变量设为全局吗 或者这会扰乱全局范围并使您的代码容易出错 这是一个范围界定问题 全局变量就是这样 Global toeveryone 使
  • 我应该如何安装keras-bert才能在R端正确使用?

    我正在尝试按照解释安装 keras berthere https blogs rstudio com ai posts 2019 09 30 bert r 虽然它已成功安装在环境 as 上 但我在 R 端看不到 keras bert ber
  • Kafka 事务失败但仍提交偏移量

    我正在尝试了解 Kafka 事务和一次性事务 我创建了一个事务消费者 我想确保我读取并处理某个主题的所有消息 如果事务失败并且消息因此丢失 Kafka 仍会提交偏移量 更正式地说 如果流处理应用程序消费消息 A 并生成消息 B 使得 B F
  • 如何将重音字符与 PHP preg 匹配?

    我想让我的用户不仅可以选择填写字母和数字 还可以选择 特殊 字母 例如 等 但是 我不希望他们能够使用符号如 等 有没有办法编写正则表达式来完成此任务 最好不要指定每个特殊字母 我现在有 reg w 你可以使用Unicode 字符属性 ht
  • networkx 有向图属性错误 self._succ

    Context 我正在尝试运行另一位研究人员的代码 它描述了湾区道路网络的交通模型 该模型容易受到地震灾害的影响 我是 Python 新手 因此非常感谢您帮助调试以下错误 Issue 当我尝试按照文件中提供的示例数据运行代码时 按照自述文件
  • Membership.DeleteUser 未删除用户的所有相关行

    Membership DeleteUser 设法删除我要删除的用户的用户配置文件 为什么它不删除它存储在的信息webpages membership 我目前没有使用角色 因此请记住这一点以获取答案 我进行了测试并验证了这一点SimpleMe
  • 可重用预处理器 __COUNTER__

    我正在做一些模板元编程 主要是编写我自己的编译时间列表 但我也有一些预处理器魔法 我想用它们来使事情变得更容易 如果可能的话 我想做的是创建一个函子的编译时列表 该部分已完成 但用于简化创建 并添加到列表中 的宏尚未完成 简单举个例子 te
  • 如何实现Web应用程序的屏幕共享? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Prologue 我想问 如何创建在网络上共享桌面屏幕的解决方案 但后来发现有很多这样的问题 这个任务非常复杂 无法用几个字符串来回答
  • 如何防止我的 .Net dll 被添加为引用?

    假设我编写了一个 Net dll 并希望将其与我的应用程序一起分发 我怎样才能防止任何有能力安装 VS 副本的用户向自己的应用程序添加对此 dll 的引用 无法阻止用户添加引用 这是 DLL 部分的被动操作 您无法采取任何措施来阻止它发生
  • 如果不存在则创建

    我有一个 Django 应用程序 它从 Web API 读取数据并将其放入数据库中 有没有办法从模式创建新对象 但如果对象已经存在 则可以防止重复异常 换句话说 有没有办法保存一个对象 但如果它已经存在则什么都不做 Model object
  • 通过 Powershell 在 IIS 7.5 中启用模拟

    我希望有人可以提供帮助 我正在尝试在 IIS 7 的身份验证会话下启用 ASP Net 模拟 我已使用以下命令启用了其他部分 Set WebConfigurationProperty filter system WebServer secu
  • 在 Perl 中启动非等待后台进程

    我有一个 Perl 脚本 需要在后台启动另一个进程并退出 而不等待其他脚本完成 StackOverflow 上有很多线程介绍如何在 Perl 中等待或如何不等待其他编程语言 但我似乎找不到 Perl 的正确答案 我已经阅读了相当多的内容 并