人に聞けない痔の悩み、これでスッキリ >>

通常で実行すると永遠と実行結果を出力するコマンドを、シェル内部にて実行して
内容をログに吐き出したいのですが停止方法がわかりません。
(ctrl+cと同じ事をシェル内部でやりたい。)

#!/bin/sh
prstat -t | awk '{print $2, $5}' > prstat.log

宜しくお願いします。

A 回答 (3件)

sleep XX -> kill はこの場合無効だと思われます。


(prstat -t だけだと永久ループのコマンドの為)

この場合は
prstat -t ではなく

prstat -t 1 300
としましょう。

意味合いとしては -t の出力結果を1秒毎更新、300回繰り返し
という意味です。
但しこの場合 prstat.log には300回実行分のログが残ります。

補足ですが prstat -t 300 1
とした場合 300秒毎に1回更新せよという意味になりますが
はじめの1回は一瞬で返ってくるので、これを1回とカウントしてしまうようです。
300秒後にもう1度実行させたい場合は prstat -t 300 2 とするが吉です。
但しこの場合もログには2回分の結果がのこります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
引数で回数が指定できたんでね。。。
すみません確認不足でした。

お礼日時:2007/07/13 14:11

#2 です。



> sleep XX -> kill はこの場合無効だと思われます。

すみません、 & が入っていたのを見落としました。
強制終了がかかった時にエラーログが吐かれるようですが
kill でも正常に動作します。
    • good
    • 0

適当な時間、例えば5分後に止めたい場合、



#!/bin/sh
(prstat -t | awk '{print $2, $5}') > prstat.log &
sleep 300
kill %1

の様に書けばいけるのではないかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング