bashでバックグラウンドで実行すると、内側のforループが新しいbashプロセスを生成します

マノハーバート

以下のスクリプトを実行しています

LOGDIR=~/curl_result_$(date |tr ' :' '_')

mkdir $LOGDIR

for THREADNO in $(seq 20)
do
for REQNO in $(seq 20)
do
 time curl --verbose -sS  http://dummy.restapiexample.com/api/v1/create --trace-ascii ${LOGDIR}/trace_${THREADNO}_${REQNO} -d @- <<EOF >> ${LOGDIR}/response_${THREADNO} 2>&1
 {"name":"emp_${THREADNO}_${REQNO}_$(date |tr ' :' '_')","salary":"$(echo $RANDOM%100000|bc)","age":"$(echo $RANDOM%100000|bc)"}
EOF
echo -e "\n-------------------------------" >> ${LOGDIR}/response_${THREADNO}
done 2>&1 | grep real > $LOGDIR/timing_${THREADNO} &
done

しばらくして、bashプロセスがないかどうかを確認すると、20(1または21ではない)が表示されます。

ps|grep bash|wc -l

問題は、内側のループを囲むために角かっこ「()」を使用していないため、新しいシェルプロセスを生成しないようにする必要があるということです。CPU使用率が100%に近づくので、新しいシェルを作成することは避けたいと思います。それが重要かどうかはわかりませんが、Cygwinを使用しています。

マイケルホーマー

ループをgrepパイプしたので、サブシェルで実行する必要があります。これはBashのマニュアルに記載されています

パイプライン内の各コマンドは、個別のプロセスである独自のサブシェルで実行されます(コマンド実行環境を参照)。

パイプラインの最後のコマンドのlastpipeシェルオプションを使用すると、これを回避できますが、他のコマンドは回避できません。いずれにせよ、パイプライン全体をバックグラウンドに配置しました。これにより、サブシェル作成されます。

これを回避する方法はありません。本質的に実行していることは、機能するために個別のシェルプロセスを必要とします。パイプラインを無視しても、バックグラウンドプロセスを作成するには、プロセスを作成する必要があります。

問題がCPU使用率である場合、それはすべてを一度に実行することによって引き起こされます。&を削除するgrep、すべてのコマンドが同時にではなく順番に実行されます。(パイプライン用に)サブシェルは引き続き作成されますが、その場合、それら自体が主な問題ではありません。それらを同時に実行する必要がある場合、CPU使用率の増加は、選択したトレードオフです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

新しいバックグラウンドtmuxウィンドウでコマンドを実行し、プロセスが終了するのを待ちます

分類Dev

すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

分類Dev

バックグラウンドで実行したときに(...)新しい子プロセスが生成されないのはなぜですか?

分類Dev

プログラムを実行すると、bashはバックグラウンドで何をしますか?

分類Dev

bashからバックグラウンドプロセスやその他のコマンドを1行で実行することはできません:予期しないトークン `; '

分類Dev

bashで実行されているバックグラウンドプロセスの数を確認し、各バックグラウンドプロセスを「待機」するにはどうすればよいですか?

分類Dev

プロセスがバックグラウンドで実行されているときに表示されるKivyをポップアップします

分類Dev

PHPバックグラウンドプロセスを実行しているbashスクリプトでshell_execを呼び出すとタイムアウトします

分類Dev

起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

分類Dev

PowerShellでバックグラウンドプロセスとしてMavenコマンドを実行する方法

分類Dev

bash-cを使用してバックグラウンドプロセスを実行する方法

分類Dev

新しいウィンドウでgit-bash.exeのプログラムを実行する方法

分類Dev

Pythonを使用してバックグラウンドで実行されるプロセスを作成します

分類Dev

コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

分類Dev

Tclスクリプトがバックグラウンドプロセスで実行されているかどうかを検出します

分類Dev

バックグラウンドプロセスとしてサーバー上でjavajarファイルを実行します

分類Dev

`&`を使用しています:プロセスがバックグラウンドで実行されないのはなぜですか?

分類Dev

Bashは2人の子供のグループをバックグラウンドで実行し、後でそれらを殺します

分類Dev

バックグラウンドに置いた後、Linuxで実行中のプロセスに戻します

分類Dev

Windows上のPHPでバックグラウンドプロセスを実行してpidを取得する

分類Dev

モバイルの戻るボタンを押したときにメディアプレーヤーのバックグラウンド実行プロセスを停止するにはどうすればよいですか

分類Dev

Microsoft.Office.Interop.Excel.Application.Quit()がバックグラウンドプロセスを実行したままにするのはなぜですか?

分類Dev

フォアグラウンドプロセスの実行中にバックグラウンドで別のプロセスを生成する方法

分類Dev

バックグラウンドでBashスクリプトを実行し、ターミナルを終了します

分類Dev

アプリケーションが使用中またはバックグラウンドで停止時に開始するアプリでタイミングプロセスを正しく実行するにはどうすればよいですか?

分類Dev

キューに入れたユーザーとは異なるプロセスでバックグラウンドジョブを実行します

分類Dev

スクリプトをバックグラウンドで起動すると、2つのプロセスが実行されます

分類Dev

タスクバーで開いているプログラムをクリックすると、Windows 7でそのウィンドウに切り替える代わりに、新しいプログラムが開きます。

分類Dev

ターミナルを閉じた後、バックグラウンドでプロセスを実行しています

Related 関連記事

  1. 1

    新しいバックグラウンドtmuxウィンドウでコマンドを実行し、プロセスが終了するのを待ちます

  2. 2

    すべてのbashプロセスをバックグラウンドとして実行するにはどうすればよいですか?

  3. 3

    バックグラウンドで実行したときに(...)新しい子プロセスが生成されないのはなぜですか?

  4. 4

    プログラムを実行すると、bashはバックグラウンドで何をしますか?

  5. 5

    bashからバックグラウンドプロセスやその他のコマンドを1行で実行することはできません:予期しないトークン `; '

  6. 6

    bashで実行されているバックグラウンドプロセスの数を確認し、各バックグラウンドプロセスを「待機」するにはどうすればよいですか?

  7. 7

    プロセスがバックグラウンドで実行されているときに表示されるKivyをポップアップします

  8. 8

    PHPバックグラウンドプロセスを実行しているbashスクリプトでshell_execを呼び出すとタイムアウトします

  9. 9

    起動時およびRaspberryPiのバックグラウンドで無限のwhileループを使用してbashスクリプトを実行する

  10. 10

    PowerShellでバックグラウンドプロセスとしてMavenコマンドを実行する方法

  11. 11

    bash-cを使用してバックグラウンドプロセスを実行する方法

  12. 12

    新しいウィンドウでgit-bash.exeのプログラムを実行する方法

  13. 13

    Pythonを使用してバックグラウンドで実行されるプロセスを作成します

  14. 14

    コマンドプロンプトからさまざまなパラメータを取得するバックグラウンドプロセスとしてPythonスクリプトを実行するにはどうすればよいですか?

  15. 15

    Tclスクリプトがバックグラウンドプロセスで実行されているかどうかを検出します

  16. 16

    バックグラウンドプロセスとしてサーバー上でjavajarファイルを実行します

  17. 17

    `&`を使用しています:プロセスがバックグラウンドで実行されないのはなぜですか?

  18. 18

    Bashは2人の子供のグループをバックグラウンドで実行し、後でそれらを殺します

  19. 19

    バックグラウンドに置いた後、Linuxで実行中のプロセスに戻します

  20. 20

    Windows上のPHPでバックグラウンドプロセスを実行してpidを取得する

  21. 21

    モバイルの戻るボタンを押したときにメディアプレーヤーのバックグラウンド実行プロセスを停止するにはどうすればよいですか

  22. 22

    Microsoft.Office.Interop.Excel.Application.Quit()がバックグラウンドプロセスを実行したままにするのはなぜですか?

  23. 23

    フォアグラウンドプロセスの実行中にバックグラウンドで別のプロセスを生成する方法

  24. 24

    バックグラウンドでBashスクリプトを実行し、ターミナルを終了します

  25. 25

    アプリケーションが使用中またはバックグラウンドで停止時に開始するアプリでタイミングプロセスを正しく実行するにはどうすればよいですか?

  26. 26

    キューに入れたユーザーとは異なるプロセスでバックグラウンドジョブを実行します

  27. 27

    スクリプトをバックグラウンドで起動すると、2つのプロセスが実行されます

  28. 28

    タスクバーで開いているプログラムをクリックすると、Windows 7でそのウィンドウに切り替える代わりに、新しいプログラムが開きます。

  29. 29

    ターミナルを閉じた後、バックグラウンドでプロセスを実行しています

ホットタグ

アーカイブ