Masalahnya baru saja terlihat di sini adalah Anda harus menunggu program yang dijalankan dari skrip Anda menyelesaikan tugasnya.
Jika di skrip Anda, Anda menjalankan program di latar belakang Anda dapat mencoba sesuatu yang lebih.
Secara umum panggilan ke sync
sebelum Anda keluar memungkinkan untuk membersihkan buffer sistem file dan dapat sedikit membantu.
Jika dalam skrip Anda memulai beberapa program di background ( &
), Anda dapat menunggu hingga program selesai sebelum Anda keluar dari skrip. Untuk mengetahui bagaimana fungsinya bisa anda simak dibawah ini
#!/bin/bash
program_1 &
PID_PROGRAM_1=${!}
program_2 &
wait ${!}
daemon_1 &
program_3 &
PID_PROGRAM_3=${!}
sync
wait $PID_PROGRAM_1
wait $PID_PROGRAM_3
Karena wait
bekerja dengan pekerjaan serta dengan PID
angka, solusi malas harus diletakkan di akhir skrip
for job in `jobs -p`
do
wait $job
done
Situasi yang lebih sulit adalah jika Anda menjalankan sesuatu yang menjalankan sesuatu yang lain di latar belakang karena Anda harus mencari dan menunggu (jika memang demikian) akhir dari semua proses anak : misalnya jika Anda menjalankan daemon mungkin tidak demikian untuk menunggu selesai :-).
catatan:
tunggu $ {!} berarti "tunggu sampai proses latar belakang terakhir selesai" di mana $!
PID dari proses latar belakang terakhir. Jadi untuk meletakkan wait ${!}
setelahnya program_2 &
sama dengan mengeksekusi secara langsung program_2
tanpa mengirimkannya di latar belakang dengan&
Dari bantuan wait
:
Syntax
wait [n ...]
Key
n A process ID or a job specification