gpt4 book ai didi

perl - 在后台执行,但限制执行次数

转载 作者:行者123 更新时间:2023-11-29 09:30:25 24 4
gpt4 key购买 nike

我有一个程序对指定的日志文件执行一些操作,每次执行都会多次刷新到磁盘。我从一个 perl 脚本调用这个程序,它允许你指定一个目录,我在目录中的所有文件上运行这个程序。由于所有冲洗操作,这可能需要很长时间。

我想执行程序并在后台运行它,但我不希望管道执行数千次。这是一个片段:

my $command = "program $data >> $log";
myExecute("$command");

myExecute 基本上使用 system() 运行命令,以及一些其他日志记录/打印功能。我想做的是:

my $command = "program $data & >> $log";

这显然会创建一个大型管道。有什么方法可以限制一次有多少后台执行(最好使用&)? (我想尝试 2-4)。

最佳答案

#!/bin/bash
#
# lets call this script "multi_script.sh"
#
#wait until there are less then 4 instances running
#polling with interval 5 seconds

while [ $( pgrep -c program ) -gt 4 ]; do sleep 5; done

/path/to/program "$1" &

现在这样调用它:

my $command = "multi_script.sh $data" >> $log;

如果 bash 脚本等待,您的 perl 脚本将等待。

正面:如果进程崩溃,它将被替换(数据当然是未处理的)

缺点:您的 perl 脚本在启动实例之间等待片刻很重要(也许是一秒钟的 sleep 时间) 因为调用脚本和通过 while 循环测试之间存在延迟。如果你生成它们的速度太快(系统垃圾邮件),你最终会得到比你预想的多得多的进程。

关于perl - 在后台执行,但限制执行次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058628/

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