允许运行一段时间后终止进程

允许运行一段时间后终止进程

我想限制grep进程命令允许运行或存活的时间。

例如。我想执行以下操作:

grep -qsRw -m1 "parameter" /var

但是在运行grep命令之前,我想限制该grep进程的存活时间,比如说不超过 30 秒。

我该怎么做呢?

如果可以,我该如何返回或重置才能不受时间限制。

答案1

您可以使用时限,它在默认的 ubuntu 中可用,或者您可以自行编译它。

时限执行命令并在给定时间后使用给定信号终止生成的进程。首先发送“警告”信号,然后在超时后发送“终止”信号,类似于 init(8) 在关机时的操作方式。

答案2

下面是一些稍微有点 hack 风格的 bash:

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

基本上,它会在后台启动搜索,然后启动一个子 shell,等待 30 秒,然后终止搜索进程。如果搜索耗时少于 30 秒,则该进程已经终止。终止已经终止的进程并不是一个好主意,因为其他进程重用该 pid 的可能性很小,但对于这种情况,这通常是可以接受的。最后,搜索将重新回到前台,并一直运行,直到搜索完成或被终止。

答案3

创建一个名为“tgrep”的新文件并在其中输入以下内容(或根据需要命名):

#!/bin/bash
grep $@ &
PID=$!
sleep 30 && kill $PID 2>/dev/null &
wait $PID
exit 0

接下来,运行chmod a+x tgrep。现在如果你想使用它,你可以输入

./tgrep -i "results" /home/dan/*txt

或者,如果您将它放在 $PATH 变量中包含的目录中(例如 /home/dan/bin/,如果它在您的 $PATH 变量中,否则您可以添加它),您可以将其用作 tgrep(不带 ./ 并且能够从任何目录中使用它)。

答案4

您可以使用timeout

timeout 30 "grep -qsRw -m1 "parameter" /var"

相关内容