Linux初心者として、私はいくつかの問題に直面しています。次のように端末に1つのコマンドがあります。
このコマンドを実行すると数行が生成されますが、問題はctrl + c
手動で押さずに5秒後にこのコマンドを停止する必要があることです。
ctrl + c
このプロセスを1000回以上繰り返す必要があるため、実際に押さずにコンピュータを介してこれを行うにはどのような方法を使用する必要がありますか?
- コマンドの実行
- 停止コマンド
- (xx秒間停止)
- コマンドの実行
- 停止コマンド
- (xx秒間停止)
- など。
特別なプログラムをインストールする必要がありますか、またはbashスクリプトを使用してインストールできますか?
答え1
バックグラウンドでコマンドを実行し、フォアグラウンドで5秒間待機してから、バックグラウンドコマンドを終了できます。
バックグラウンドでコマンドを実行します。
command &
PIDコマンドを変数に保存します。
command_pid=$!
5秒間睡眠:
sleep 5
バックグラウンドプロセスの終了:
kill "$command_pid"
これで一時停止を追加し、ループ全体を移動できます。
リング:
for ((i=0; i<1000; i++)); do
crunch 7 7 abcdefghijklm &
command_pid=$!
sleep 5
kill "$command_pid"
sleep 5 #pause
done
答え2
使用可能であると仮定すると、timeout(1)
シェルコマンドは
timeout 5s whateverthatcommandis; sleep 99
プログラムは5秒後に終了する必要があります(プログラムがうまく動作すると仮定しています...)、それ以降はsleep
xx秒が何でも構いません。その後、必要に応じてこれらのコマンドを一種のループにラップできます。seq
これが利用可能であると仮定すると(BSDにありますjot
)、一般的なループは次のように実行できます。
for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done
ところで、ZSHではシェルループがより明確になります。
repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }