私は、bash を使用して、いくつかのコマンドをバックグラウンドで並行して実行しようとしています。私がやろうとしていることは次のとおりです。
forloop {
//this part is actually written in perl
//call command sequence
print `touch .file1.lock; cp bigfile1 /destination; rm .file1.lock;`;
}
バックティック (``) の間の部分は、新しいシェルを生成し、コマンドを連続して実行します。問題は、最後のコマンドが実行された後にのみ、元のプログラムへの制御が返されることです。ステートメント全体をバックグラウンドで実行し (出力/戻り値は期待していません)、ループの実行を継続したいと思います。
呼び出し元のプログラム (ループを持つプログラム) は、生成されたシェルがすべて終了するまで終了しません。
Perl のスレッドを使用して、異なるシェルを呼び出す異なるスレッドを生成することもできますが、やりすぎのようです...
シェルを起動し、一連のコマンドを与えて、バックグラウンドに移動するように指示できますか?
ベストアンサー1
まだテストしていませんが、
print `(touch .file1.lock; cp bigfile1 /destination; rm .file1.lock;) &`;
括弧はサブシェルで実行することを意味しますが、問題はありません。