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


13

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

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

grep -qsRw -m1 "parameter" /var

但是在运行grep命令之前,我想限制该grep过程的持续时间,例如不超过30秒。

我该怎么做呢?

如果可以的话,之后我该如何返回或重置为无时间限制。



没有其他问题,因为我没有收到关于原始问题的答复Yael

4
@yael:使用之前,您已经获得了一个非常好的解决方案,timeout甚至还获得了有关如何安装它的说明。忽略此答案,然后重复您的问题是不礼貌的。
Paul R 2010年

抱歉,不,我不想在我的系统上安装任何东西THX yael

5
@yael:然后您需要更新原始问题以包括此约束,而不仅仅是重复问题并重新开始
Paul R 2010年

Answers:


12

您可以使用timelimit,它在默认的ubuntu中可用,也可以自己编译。

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


2
它不在我的Ubuntu(10.10台式机,11.04服务器)中,因此可能不是默认设置。但是容易快速地抓住sudo aptitude install timelimit。一旦安装,效果很好。
日,一天

7

这是一些有点骇人听闻的打击:

grep -qsRw -m1 "parameter" /var &

GREPPID=$!

( sleep 30; kill $GREPPID ) &

fg $GREPPID

基本上,它在后台启动搜索,然后启动一个等待30秒的子外壳,然后终止搜索过程。如果搜索时间少于30秒,则该过程将被终止。终止已经死掉的进程不是一个好主意,因为很少有其他东西可以重用该pid,但是对于这样的事情,通常是可以的。最后,搜索将放回前台,直到搜索完成或被杀死为止。


如何获得美元?从grep在这种情况下,因为在我的脚本中我带$?从grep验证grep是否匹配字符串?yael

我不确定是否有直接的方法可以做到这一点。此外,这种方法在bash没有激活作业控制的脚本中不起作用。您可能需要借助Perl黑客工具才能通过脚本完成工作。嗯...
Walter Mundt 2010年

有可能将这个问题带到perl吗?Yael

4

创建一个名为“ 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 /,则可以将其用作tgrep)(不带./,并且可以从任何目录使用它)。您的$ PATH变量,否则可以添加它)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.