- ベストアンサー
シェルでの強制終了
通常で実行すると永遠と実行結果を出力するコマンドを、シェル内部にて実行して 内容をログに吐き出したいのですが停止方法がわかりません。 (ctrl+cと同じ事をシェル内部でやりたい。) #!/bin/sh prstat -t | awk '{print $2, $5}' > prstat.log 宜しくお願いします。
- みんなの回答 (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回分の結果がのこります。
その他の回答 (2)
- elflend
- ベストアンサー率64% (58/90)
#2 です。 > sleep XX -> kill はこの場合無効だと思われます。 すみません、 & が入っていたのを見落としました。 強制終了がかかった時にエラーログが吐かれるようですが kill でも正常に動作します。
- maku_x
- ベストアンサー率44% (164/371)
適当な時間、例えば5分後に止めたい場合、 #!/bin/sh (prstat -t | awk '{print $2, $5}') > prstat.log & sleep 300 kill %1 の様に書けばいけるのではないかと思います。
お礼
ありがとうございます。 引数で回数が指定できたんでね。。。 すみません確認不足でした。