実行中のシェルからジョブキューに入れる

実行中のシェルからジョブキューに入れる

私はしばしばCPU、ディスク、RAM、またはインターネット接続にバインドされた長期実行コマンドを実行します。実行中に同様のコマンドを実行したいと思いました。大きなものをダウンロードするとしましょう。

それからシェルを起動しwget ...1て実行しましょう。別のシェルを開いて別のシェルを実行できますが、wget ...2今度は帯域幅を離して競います。実行中のシェルに2番目のコマンドを入力すると、インタラクティブではないwgetため、後で実行されます。

BashまたはFish Shellを使用してこれを行うための合理的な方法はありますか?

答え1

すでにフォアグラウンドで実行されている場合は、wget http://first+を使用して一時停止し、すぐに別のコマンドを使用してジョブの状態に戻すことができます。CTRLz

fg ; wget http://second

ほとんどの場合動作します。

このアプローチが許可されていない場合は、ロックファイルを使用する必要があります。または、psファイルをロックする方法でプロセスを監視することもできます。

答え2

あなたは見つけることができますジョブスプーラ役に立つ。

アプリケーションの説明を引用すると、

ジョブスプーラは、スプールされたジョブが順番に実行されるUnixデプロイメントシステムです。いつでも実行するジョブの量を設定できます。各システムの各ユーザーには独自のジョブキューがあります。これらの操作は、すべてのシェル/プロセスの正しいコンテキスト(インキューコンテキスト)で実行され、その出力/結果を簡単に表示できます。

答え3

HTCondorなどの洗練されたジョブキューマネージャをインストールし、そこにジョブをキューに入れることができます。 Debian では、コンピュータのシングルユーザーに設定するのは簡単です。ほとんどの場合、これはおそらく過剰です。

関連情報