バックグラウンドでコードを実行する方法は?

バックグラウンドでコードを実行する方法は?

他のスクリプトを使用する代わりにバックグラウンドでコードを実行できますか?

[sesiv@itseelm-lx4151 ~]$ cat ./testback2
#!/bin/bash
start_time=$(date +%s)

for i in {1..5}
do
./testscript &
done
wait

        finish_time=$(date +%s)
        seconds=$((finish_time - start_time))
        hours=$((seconds / 3600))
        seconds=$((seconds % 3600))
        minutes=$((seconds / 60))
        seconds=$((seconds % 60))
        echo "Time Taken :"
        echo "$hours hour(s) $minutes minute(s) $seconds second(s)"

[sesiv@itseelm-lx4151 ~]$ ./testback2
sleeping 22436
sleeping 22438
sleeping 22440
sleeping 22442
sleeping 22435
Time Taken :
0 hour(s) 0 minute(s) 3 second(s)

以下のことを試しましたが、親プロセスIDを提供します。上記のように、5つの異なるサブプロセスIDが必要です。ところでここのタイマーは3秒しかありません。

#!/bin/bash
start_time=$(date +%s)
fun() {
echo "$1 $$"
sleep 3
}


for i in {1..5}
do
fun sleeping &
done
wait

        finish_time=$(date +%s)
        seconds=$((finish_time - start_time))
        hours=$((seconds / 3600))
        seconds=$((seconds % 3600))
        minutes=$((seconds / 60))
        seconds=$((seconds % 60))
        echo "Time Taken :"
        echo "$hours hour(s) $minutes minute(s) $seconds second(s)"

output :
sleeping 22028
sleeping 22028
sleeping 22028
sleeping 22028
sleeping 22028
Time Taken :
0 hour(s) 0 minute(s) 3 second(s)

注:これはtestscriptコードです。

#!/bin/bash
fun() {
echo "$1 $$"
sleep 3
}

fun sleeping

ベストアンサー1

場合によっては、bashは新しいプロセスを作成しますが、古い値は$$そのまま残ります。試して$BASHPIDみてください。

おすすめ記事