1

我正在使用 PHP 脚本在 Linux 中调用 shell 脚本,我执行以下操作:

shell_exec('./shell_script.sh');

在此之后,PHP 脚本继续运行。所有这些都按预期工作。

但是,有时 shell_script 出于某种原因没有完成执行,所以这里有一个问题:

如何在执行 x 时间后终止 shell_script.sh?应该以某种方式在 PHP 本身中处理这件事(在这种情况下不认为这是可能的)还是应该在 .sh 本身中完成?

所以就在:

#!/bin/bash

在 .sh 的开头,如果执行时间可能超过 20 秒,我可以把它终止吗?

4

2 回答 2

3

我不知道你是否可以在 php 中做到这一点,并且在 bash 中可能存在更好的解决方案,但这是你可以做到的:

这是您可以在 20 秒后立即终止#!/bin/bash当前脚本的行:

(sleep 20 && kill $$) &

bash 将 $$ 替换为当前脚本的 pid。

于 2012-07-16T20:59:36.293 回答
1

你可以使用这样的东西:

# start timer
( sleep $TIMEOUT ; kill $$ ) 2>/dev/null &
TIMER_PID=$!

# "payload"
echo hello

# cancel timer
kill $TIMER_PID

但是,YMMV 在我的测试中,应该取消计时器的部分有时不会终止sleep,程序会一直等到超时结束。

于 2012-07-17T12:19:23.247 回答