Tunggu
adalah perintah yang menunggu pekerjaan yang diberikan selesai dan mengembalikan status keluar dari perintah yang ditunggu.
Sejak Tunggu
perintah mempengaruhi lingkungan eksekusi shell saat ini, ini diimplementasikan sebagai perintah bawaan di sebagian besar shell.
Pada artikel ini, kita akan menjelajahi Bash built-in Tunggu
perintah.
Pesta Tunggu
Perintah #
Sintaks umum dari Tunggu
built-in mengambil bentuk berikut:
tunggu [opsi] ID
Indo
adalah proses atau ID pekerjaan. Jika tidak Indo
ditentukan, perintah menunggu sampai semua pekerjaan latar belakang anak selesai.
Itu Tunggu
perintah mengembalikan status keluar dari perintah terakhir yang ditunggu.
Misalnya, untuk menunggu proses latar belakang dengan PID 7654
, Anda akan menggunakan:
tunggu 7654
Ketika beberapa proses diberikan, perintah menunggu semua proses selesai.
Pekerjaan ditentukan menggunakan spesifikasi pekerjaan (“jobspec”), yang merupakan cara untuk merujuk pada proses yang membentuk pekerjaan. Jobspec dimulai dengan simbol persentase diikuti dengan nomor pekerjaan (%n
). Berikut ini contohnya:
Jalankan perintah di latar belakang:
rsync -a /home /tmp/home &
ID pekerjaan shell (dikelilingi dengan tanda kurung) dan ID proses akan ditampilkan di terminal Anda:
[2] 54377
Untuk menunggu pekerjaan, jalankan Tunggu
perintah diikuti dengan spesifikasi pekerjaan:
tunggu %2
Ketika dipanggil dengan -tidak
opsi, perintah hanya menunggu satu pekerjaan dari pid atau spesifikasi pekerjaan yang diberikan untuk diselesaikan dan mengembalikan status keluarnya. Jika tidak ada argumen yang diberikan, tunggu -n
menunggu pekerjaan latar belakang apa pun selesai dan mengembalikan status keluar pekerjaan.
tunggu -n 45432 54346 76573
Pada contoh di atas, tunggu -n
hanya mencetak status pengembalian pekerjaan yang keluar terlebih dahulu; itu tidak menunjukkan PID pekerjaan. Jika Anda ingin mendapatkan pid pekerjaan atau spesifikasi pekerjaan yang status keluarnya dikembalikan, gunakan: -p
opsi untuk menetapkannya ke variabel:
tunggu -p job_id -n 45432 54346 76573
-p
opsi diperkenalkan di Bash 5.1. Jika Anda menggunakan versi Bash yang lebih lama, Anda akan mendapatkan kesalahan "opsi tidak valid".
Itu -f
pilihan memberitahu Tunggu
untuk menunggu setiap pid atau jobspec benar-benar berakhir sebelum mengembalikan kode keluarnya, daripada kembali ketika status pekerjaan diubah. Opsi ini hanya berlaku jika kontrol pekerjaan diaktifkan. Secara default, kontrol pekerjaan diaktifkan hanya untuk petunjuk interaktif.
Contoh #
Tunggu
biasanya digunakan dalam skrip shell yang menelurkan proses anak yang dijalankan secara paralel.
Untuk mengilustrasikan cara kerja perintah, buat skrip berikut:
#!/bin/bash tidur 30 & process_id=$! echo "PID: $process_id" tunggu $process_id echo "Status keluar: $?"
Mari kita jelaskan kode baris demi baris:
- Baris pertama disebut shebang dan memberi tahu sistem operasi penerjemah mana yang digunakan untuk mengurai sisa file.
- Kami menggunakan
tidur
perintah untuk meniru proses latar belakang yang memakan waktu. $!
adalah variabel Bash internal yang menyimpan PID dari pekerjaan terakhir yang dijalankan di latar belakang. Dalam contoh ini, itu adalah PID daritidur
perintah. Kami menyimpan PID dalam variabel (proses_id
).- Mencetak nomor PID.
- PID diteruskan ke
Tunggu
perintah yang menunggu sampaitidur
perintah selesai. - Mencetak status keluar dari
Tunggu
perintah.$?
adalah variabel Bash internal yang memegang status keluar dari perintah terakhir yang dieksekusi.
Jika Anda menjalankan skrip, itu akan mencetak sesuatu seperti ini:
PID: 36353 Status keluar: 0
Berikut contoh menggunakan -tidak
pilihan:
#!/bin/bash sleep 3 & sleep 30 & sleep 5 & wait -n echo "Pekerjaan pertama selesai." wait echo "Semua pekerjaan selesai."
Ketika skrip dieksekusi, itu memunculkan 3 proses latar belakang. tunggu -n
menunggu sampai pekerjaan pertama selesai dan pernyataan gema dicetak. Tunggu
menunggu semua pekerjaan latar belakang anak selesai.
pekerjaan pertama selesai semua pekerjaan selesai
Contoh terakhir menjelaskan -f
pilihan. Buka terminal dan jalankan:
tidur 3600 &
[1] 46671
Tunggu prosesnya:
tunggu 46671
Buka terminal lain dan hentikan proses dengan membunuh
perintah:
bunuh -BERHENTI 46671
Setelah status proses diubah, Tunggu
perintah akan menyelesaikan dan mengembalikan kode keluar proses.
Sekarang, ulangi langkah yang sama, tapi kali ini gunakan tunggu -f $pid
:
tidur 3600 &
tunggu -f 46671
Hentikan proses dari terminal lain:
bunuh -BERHENTI 46671
Kali ini Tunggu
perintah tidak akan selesai. Ini akan berjalan sampai tidur
proses berakhir.
Kesimpulan #
Itu Tunggu
perintah menunggu pekerjaan yang ditentukan untuk menyelesaikan dan mengembalikan kode keluar dari pekerjaan.
Jika Anda memiliki pertanyaan atau umpan balik, jangan ragu untuk meninggalkan komentar.