人の干渉なしに端末でコマンドを実行/停止しますか?

人の干渉なしに端末でコマンドを実行/停止しますか?

Linux初心者として、私はいくつかの問題に直面しています。次のように端末に1つのコマンドがあります。 ここに画像の説明を入力してください。

このコマンドを実行すると数行が生成されますが、問題はctrl + c手動で押さずに5秒後にこのコマンドを停止する必要があることです。

Ctrl+C 停止コマンド

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秒後に終了する必要があります(プログラムがうまく動作すると仮定しています...)、それ以降はsleepxx秒が何でも構いません。その後、必要に応じてこれらのコマンドを一種のループにラップできます。seqこれが利用可能であると仮定すると(BSDにありますjot)、一般的なループは次のように実行できます。

for n in `seq 1 1000`; do timeout 5s whateverthatcommandis; sleep 99; done

ところで、ZSHではシェルループがより明確になります。

repeat 1000 { timeout 5s whateverthatcommandis; sleep 99 }

関連情報