Bash tunggu Perintah dengan Contoh

Perintah wait di Bash adalah alat yang ampuh untuk mengelola proses skrip shell. Perintah ini terutama digunakan untuk menghentikan sementara eksekusi skrip hingga proses latar belakang yang ditentukan selesai. Perintah ini berguna dalam skrip yang memulai beberapa pekerjaan latar belakang dan perlu menyinkronkan penyelesaiannya sebelum melanjutkan tugas selanjutnya. Perintah wait dapat diterapkan ke ID proses individual (PID) atau untuk menunggu semua proses latar belakang yang dimulai oleh sesi shell saat ini. Dengan menggunakan wait, Anda dapat memastikan bahwa skrip Anda hanya bergerak maju saat tugas tertentu selesai sepenuhnya, membuat proses otomatisasi Anda lebih andal dan efisien.

Panduan ini akan memberikan contoh praktis penggunaan perintah tunggu dalam berbagai skenario, membantu Anda memahami cara mengelola proses latar belakang secara efektif di skrip Bash Anda.

Memahami Perintah Bash wait

Perintah wait di Bash adalah fungsi bawaan yang menghentikan eksekusi shell saat ini hingga pekerjaan yang ditentukan selesai. Ini kemudian mengembalikan status keluar dari perintah yang telah ditunggu. Perintah ini memainkan peran penting dalam lingkungan eksekusi shell, dan dengan demikian, perintah ini dibangun di sebagian besar shell.

Sintaks umum dari perintah wait adalah sebagai berikut:

wait [ID]

Dalam konteks ini, ID mewakili ID proses atau pekerjaan. Jika tidak ada ID yang ditentukan, perintah wait akan berhenti hingga semua pekerjaan latar belakang anak selesai. Perintah wait mengembalikan status keluar dari perintah terakhir yang ditunggu.

Misalnya, untuk menjeda proses latar belakang dengan PID 7654, Anda dapat menggunakan:

wait 7654

Jika beberapa proses ditentukan, perintah tunggu akan berhenti hingga proses tersebut selesai.

Menavigasi Spesifikasi Pekerjaan dengan Perintah bash wait

Pekerjaan ditentukan menggunakan spesifikasi pekerjaan (jobspec), yang mengacu pada proses yang menyusun pekerjaan tersebut. Jobspec dimulai dengan simbol persentase diikuti oleh nomor pekerjaan (%n). Berikut ini contohnya:

rsync -a /home /tmp/home &

Perintah ini berjalan di latar belakang. ID pekerjaan shell (diapit tanda kurung) dan ID proses akan ditampilkan di terminal Anda. Untuk menjeda pekerjaan, jalankan perintah tunggu diikuti dengan spesifikasi pekerjaan:

wait %2

Memanfaatkan Opsi -n dengan Perintah bash wait

Opsi -n memungkinkan perintah wait untuk berhenti sejenak hanya untuk satu pekerjaan dari PID atau spesifikasi pekerjaan tertentu untuk diselesaikan dan mengembalikan status keluarnya. Jika tidak ada argumen yang diberikan, wait -n menunggu pekerjaan latar belakang selesai dan mengembalikan status keluar pekerjaan.

wait -n 45432 54346 76573

Dalam contoh di atas, wait -n hanya mencetak status pengembalian pekerjaan yang keluar lebih dulu; perintah ini tidak menampilkan PID pekerjaan. Jika Anda ingin mendapatkan PID pekerjaan atau jobspec yang status keluarnya dikembalikan, gunakan perintah -p opsi untuk menetapkannya ke variabel:

wait -p job_id -n 45432 54346 76573

Opsi -p diperkenalkan di Bash 5.1. Menggunakan versi Bash yang lebih lama akan menghasilkan kesalahan “opsi tidak valid”.

Menjelajahi Opsi -f dengan Perintah bash wait

Opsi -f memerintahkan menunggu untuk berhenti sejenak agar setiap PID atau jobspec berakhir sebelum mengembalikan kode keluarnya, alih-alih mengembalikannya saat status pekerjaan diubah. Opsi ini hanya berlaku saat kontrol pekerjaan diaktifkan, yang diaktifkan secara default hanya untuk perintah interaktif.

Contoh Praktis dari Perintah tunggu

Perintah wait biasanya digunakan dalam skrip shell yang menelurkan proses anak yang dijalankan secara paralel. Untuk mengilustrasikan cara kerja perintah, mari buat skrip berikut:

#!/bin/bash
sleep 30 &
process_id=$!
echo "PID: $process_id"
wait $process_id
echo "Exit status: $?"

Mari kita uraikan kodenya baris demi baris:

  • Baris pertama, shebang, memberi tahu sistem operasi interpreter mana yang akan digunakan untuk mengurai sisa berkas.
  • Kami menggunakan perintah sleep 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 dari perintah sleep. Kami menyimpan PID dalam variabel (process_id).
  • Nomor PID dicetak.
  • PID diteruskan ke perintah tunggu yang dijeda hingga perintah tidur selesai.
  • Status keluar dari perintah tunggu dicetak. $? adalah variabel Bash internal yang menyimpan status keluar dari perintah terakhir yang dijalankan.

Jika Anda menjalankan skrip, maka akan mencetak sesuatu seperti ini:

PID: 36353
Exit status: 0

Berikut ini contoh penggunaan opsi -n:

#!/bin/bash
sleep 3 &
sleep 30 &
sleep 5 &
wait -n
echo "First job completed."
wait
echo "All jobs completed."

Saat skrip dijalankan, ini memunculkan 3 proses latar belakang. wait -n menjeda hingga pekerjaan pertama selesai dan pernyataan echo dicetak. tunggu sebentar hingga semua pekerjaan latar belakang anak selesai.

First job completed.
All jobs completed.

Contoh terakhir menjelaskan opsi -f. Buka terminal dan jalankan:

sleep 3600 &
[1] 46671
wait 46671

Buka terminal lain dan hentikan proses dengan perintah kill:

kill -STOP 46671

Setelah status proses berubah, perintah tunggu akan diselesaikan, dan kode keluar proses akan dikembalikan.

Sekarang, ulangi langkah yang sama, tapi kali ini gunakan wait -f $pid:

sleep 3600 &
wait -f 46671

Hentikan proses dari terminal lain:

kill -STOP 46671

Kali ini, perintah wait tidak akan selesai. Perintah ini akan berjalan hingga proses sleep berakhir.

Penggunaan Lanjutan dari Perintah tunggu

Perintah wait menjadi sangat berguna saat mengelola beberapa proses dalam satu skrip. Perintah ini memungkinkan Anda untuk mengontrol alur eksekusi dan memastikan bahwa proses tertentu telah diselesaikan sebelum proses lainnya dimulai. Mari kita bahas beberapa contoh yang lebih rumit untuk mengilustrasikan hal ini.

Bash menunggu Banyak Proses

Pertimbangkan skenario di mana beberapa proses berjalan di latar belakang, dan Anda harus bertindak hanya setelah menyelesaikannya. Berikut ini cara menggunakan perintah wait untuk mencapainya:

#!/bin/bash
echo "Starting process 1..."
sleep 10 &
pid1=$!

echo "Starting process 2..."
sleep 15 &
pid2=$!

echo "Starting process 3..."
sleep 20 &
pid3=$!

echo "Waiting for processes to complete..."
wait $pid1 $pid2 $pid3
echo "All processes completed."

Skrip ini memulai tiga proses latar belakang yang tidur masing-masing selama 10, 15, dan 20 detik. Kami menyimpan PID setiap proses dalam sebuah variabel. Kemudian, kami menggunakan perintah wait dengan ketiga PID sebagai argumen. Script akan berhenti pada perintah wait hingga ketiga proses selesai.

Menggunakan Bash, tunggu dengan Loop

Anda juga dapat menggunakan wait dengan loop untuk mengelola beberapa proses. Berikut contohnya:

#!/bin/bash
for i in {1..5}
do
   echo "Starting process $i..."
   sleep $i &
   pids[${i}]=$!
done

echo "Waiting for processes to complete..."
for pid in ${pids[*]}; do
    wait $pid
done

echo "All processes completed."

Dalam skrip ini, kami memulai lima proses latar belakang dalam satu lingkaran. Setiap proses tidur selama beberapa detik sama dengan indeksnya dalam loop. Kami menyimpan PID setiap proses dalam sebuah array. Setelah memulai semua proses, kita mengulang array dan menggunakan perintah wait untuk menjeda setiap proses satu per satu. Skrip akan berhenti sejenak pada setiap perintah tunggu hingga proses terkait selesai.

Kesimpulan

Perintah wait di Bash sangat penting untuk menyinkronkan proses latar belakang dalam skrip Anda. Dengan memahami cara menggunakan wait, Anda dapat mengendalikan alur skrip Anda dengan lebih tepat, memastikan bahwa tugas diselesaikan dalam urutan yang diinginkan. Apakah Anda menangani beberapa pekerjaan latar belakang atau harus memastikan proses tertentu selesai sebelum melanjutkan, perintah wait dapat membantu Anda mencapai perilaku skrip yang lebih andal dan dapat diprediksi. Pertimbangkan untuk mengintegrasikan wait ke dalam skrip Anda untuk meningkatkan manajemen proses dan meningkatkan efisiensi skrip secara keseluruhan.

Joshua James
Ikuti aku
Postingan terbaru oleh Joshua James (Lihat semua)

Tinggalkan komentar