tunggu
adalah perintah yang menunggu tugas yang diberikan selesai dan mengembalikan status keluar dari perintah yang ditunggu.
Sejak tunggu
perintah mempengaruhi persekitaran pelaksanaan shell saat ini, ia dilaksanakan sebagai perintah built-in di kebanyakan shell.
Dalam artikel ini, kita akan meneroka Bash terbina dalam tunggu
perintah.
Tendangan tunggu
Perintah #
Sintaks am bagi tunggu
terbina dalam bentuk berikut:
tunggu ID [pilihan]
ID
adalah proses atau ID pekerjaan. Jika tidak ID
ditentukan, perintah menunggu sehingga semua pekerjaan latar belakang anak selesai.
The tunggu
arahan mengembalikan status keluar dari arahan terakhir yang ditunggu.
Sebagai contoh, untuk menunggu proses latar belakang dengan PID 7654
, anda akan menggunakan:
tunggu 7654
Apabila banyak proses diberikan, perintah menunggu semua proses selesai.
Pekerjaan ditentukan menggunakan spesifikasi pekerjaan ("jobspec"), yang merupakan cara untuk merujuk pada proses yang membentuk pekerjaan. Jobpec bermula dengan simbol peratusan diikuti dengan nombor pekerjaan (% n
). Berikut adalah contoh:
Jalankan perintah di latar belakang:
rsync -a / rumah / tmp / rumah &
ID tugas shell (dikelilingi dengan tanda kurung) dan ID proses akan dipaparkan di terminal anda:
[2] 54377
Untuk menunggu kerja, jalankan tunggu
arahan diikuti dengan spesifikasi pekerjaan:
tunggu% 2
Apabila dipanggil dengan -n
pilihan, perintah hanya menunggu satu pekerjaan dari pid atau jobspec yang diberikan untuk menyelesaikan dan mengembalikan status keluarnya. Sekiranya tidak ada hujah yang diberikan, tunggu -n
menunggu sebarang pekerjaan latar belakang selesai dan mengembalikan status keluar kerja.
tunggu -n 45432 54346 76573
Dalam contoh di atas, tunggu -n
hanya mencetak status pengembalian pekerjaan yang keluar terlebih dahulu; ia tidak menunjukkan PID pekerjaan. Sekiranya anda ingin mendapatkan pid pekerjaan ataupekerjaan yang status keluarnya dikembalikan, gunakan -hlm
pilihan untuk memberikannya kepada pemboleh ubah:
tunggu -p job_id -n 45432 54346 76573
-hlm
pilihan diperkenalkan dalam Bash 5.1. Sekiranya anda menggunakan versi Bash yang lebih lama, anda akan mendapat ralat "pilihan tidak sah".
The -f
pilihan memberitahu tunggu
untuk menunggu setiap pid atau jobspec benar-benar dihentikan sebelum mengembalikan kod keluarnya, dan bukannya kembali ketika status pekerjaan diubah. Pilihan ini hanya sah apabila kawalan kerja diaktifkan. Secara lalai, kawalan kerja diaktifkan hanya untuk arahan interaktif.
Contoh #
tunggu
biasanya digunakan dalam skrip shell yang melahirkan proses anak yang dijalankan secara selari.
Untuk menggambarkan bagaimana perintah itu berfungsi, buat skrip berikut:
#!/ bin / bash sleep 30 & process_id = $! echo "PID: $ process_id" tunggu $ process_id echo "Status keluar: $?"
Mari jelaskan baris demi baris kod:
- Baris pertama disebut shebang dan memberitahu sistem operasi yang digunakan jurubahasa untuk menghuraikan fail yang selebihnya.
- Kami menggunakan
tidur
arahan untuk meniru proses latar belakang yang memakan masa. $!
adalah pemboleh ubah Bash dalaman yang menyimpan PID pekerjaan terakhir yang dijalankan di latar belakang. Dalam contoh ini, itulah PID daritidur
perintah. Kami menyimpan PID dalam pemboleh ubah (proses_id
).- Mencetak nombor PID.
- PID diserahkan ke
tunggu
arahan yang menunggu sehinggatidur
arahan selesai. - Mencetak status keluar dari
tunggu
perintah.$?
adalah pemboleh ubah Bash dalaman yang memegang status keluar dari arahan terakhir yang dilaksanakan.
Sekiranya anda menjalankan skrip, ia akan mencetak seperti ini:
PID: 36353 Status keluar: 0
Berikut adalah contoh menggunakan -n
pilihan:
#!/ bin / bash sleep 3 & sleep 30 & sleep 5 & waiting -n echo "Kerja pertama selesai."tunggu gema" Semua pekerjaan selesai."
Apabila skrip dijalankan, ia menghasilkan 3 proses latar belakang. tunggu -n
menunggu sehingga kerja pertama selesai dan pernyataan gema dicetak. tunggu
menunggu semua pekerjaan latar belakang kanak-kanak selesai.
kerja pertama selesai semua pekerjaan selesai
Contoh terakhir menerangkan -f
pilihan. Buka terminal dan jalankan:
tidur 3600 &
[1] 46671
Tunggu prosesnya:
tunggu 46671
Buka terminal lain dan hentikan proses dengan bunuh
arahan:
bunuh -STOP 46671
Setelah status proses diubah, the tunggu
arahan akan menyelesaikan dan mengembalikan kod keluar proses.
Sekarang, ulangi langkah yang sama, tetapi kali ini gunakan tunggu -f $ pid
:
tidur 3600 &
tunggu -f 46671
Hentikan proses dari terminal lain:
bunuh -STOP 46671
Kali ini tunggu
arahan tidak akan lengkap. Ia akan berjalan sehingga tidur
proses berakhir.
Kesimpulan #
The tunggu
perintah menunggu tugas yang ditentukan selesai dan mengembalikan kod keluar pekerjaan.
Sekiranya anda mempunyai pertanyaan atau maklum balas, jangan ragu untuk memberikan komen.