しばらく実行が許可された後にプロセスを強制終了する


12

grepプロセスコマンドの実行または実行を許可する時間を制限したい。

例えば。以下を実行したい:

grep -qsRw -m1 "parameter" /var

しかし、grepコマンドを実行する前に、grepプロセスの存続期間を制限します(30秒以内など)。

どうすればいいですか?

そして、もし可能であれば、どのようにして時間制限がないように戻すかリセットしますか。


3
これはもう聞いてないの?stackoverflow.com/questions/3061377/…–

いいえ、この他の質問はありません。元の質問に答えが得られないからですYael

4
@yael:を使用してtimeout、以前は完全に優れたソリューションを取得し、インストール方法の指示さえも取得しました。この回答を無視してから質問を複製するのは失礼です。
ポールR

申し訳ありませんが、私はシステムに何もインストールしたくありませんTHX yael

5
@yael:あなたはする必要があり、この制約を含めるようにあなたの元の質問を更新するだけですべてやり直す質問を複製し、起動しない、
ポールR

回答:


11

timelimitを使用できます。これはデフォルトのubuntuで使用できますが、自分でコンパイルすることもできます。

timelimitはコマンドを実行し、特定のシグナルで特定の時間後に生成されたプロセスを終了します。「警告」シグナルが最初に送信され、次にタイムアウト後に「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ハッカーに頼らなければならない場合があります。うーん...
ウォルターMundt氏

perlにこの質問に到着することは可能ですか?ヤエル

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 /など、それが$ PATH変数、それ以外の場合は追加できます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.