Bash timeout循环:命令超时而不启动

2024-09-26 23:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常简单的bash脚本,用于在循环中运行另一个脚本。下面是一个更简单的版本:

#!/usr/bin/env bash

for ((i=1; i<=100; i++))
do
    echo "$i"
    timeout --foreground -s SIGKILL 30 python parent.py args || echo "Timeout"
done

当然,arg是依赖于i的选项,为了简单起见,我不包括这些选项。 在一些运行之后,我看到以下输出:

42
Timeout
43
Timeout
etc

问题是parent.py在~3秒后非常快地打印出一些结果,然后继续处理一些需要~20秒的内容,但我想通过超时处理的罕见情况除外

还有什么需要让超时生效的吗?我什么也找不到,所以我试着往不同的方向看。我使用了htop命令,并注意到我正在100%(实际上是400%)上工作。我发现了一些可能是问题的原因,但首先让我在parent.py上为您提供更多信息:

# do stuff
python child.py

现在在child.py上:

# do stuff
grandchild1 = SubprocessThread(args)
grandchild2 = SubprocessThread(args)
grandchild1.start()
grandchild2.start()
grandchild1.join()
grandchild2.join()

虽然父母和孩子没有像预期的那样在htop上,但两个孙子都在那里,吃着我的cpu电源。我应该补充一点,根据htop,他们不是僵尸,他们不是在跑步就是在睡觉

有没有关于如何解决这个问题的建议?(理想情况下,无需修改子代中的任何代码,因为它们已经有几百行了,可以单独使用。)


Tags: pyecho脚本bashchild选项timeout情况

热门问题