
我想限制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"