
Wait adalah perintah shell yang menunggu proses tertentu selesai, lalu mengembalikan status keluarnya. Perintah tunggu digunakan untuk menunggu ID proses dan ID pekerjaan tertentu dan mengembalikan status penghentiannya.
Saat menjalankan aliran otomatisasi besar, kita perlu membuat beberapa modul harus menunggu hingga kumpulan modul sebelumnya selesai dan mengembalikan data yang disalurkan ke modul berikutnya, dalam hal ini kita dapat menggunakan perintah Tunggu hingga modul sebelumnya selesai.
Cara kerja perintah wait
Perintah tunggu digunakan untuk memantau proses sebelumnya, tergantung pada status pengembalian proses sebelumnya akan mengembalikan status keluar. Misalnya, jika kita ingin menunggu untuk menyelesaikan proses tertentu ID 13245, maka kita harus menggunakan “wait 13245“ ketika proses 13245 complete wait perintah mengembalikan nilai kembali dari status keluar 13245.
- tunggu PID (PID - ID Proses dari suatu perintah, yang utilitasnya akan menunggu penghentian).
- wait JID (JID - Job ID yang mengidentifikasi proses latar belakang untuk menunggu, hanya berlaku untuk pemanggilan wait di lingkungan eksekusi shell saat ini).
Nilai status keluar dari perintah wait tergantung pada PID/JID terakhir yang ditentukan. Ketika ada proses yang berhenti secara tidak normal maka status keluar akan lebih besar dari 128.
Perintah tunggu keluar dengan nilai 0
ketika panggilan tanpa proses anak dan semua ID proses yang diketahui oleh shell saat ini telah dihentikan. Jika perintah wait mendeteksi kesalahan apa pun maka ia mengembalikan nilai apa pun dari 1 hingga 126. Jika id proses terakhir tidak diketahui maka perintah wait keluar dengan nilai 127.
Contoh Perintah Tunggu
Mari kita periksa beberapa skrip untuk memahami cara kerja perintah wait.
Contoh:1 – Skrip dengan perintah Tunggu
Kami memiliki dua skrip yang disebut skrip 'foo.sh' dan 'bar.sh'. Skrip 'Foo.sh' mencetak angka antara 1 hingga 5 dan skrip 'bar.sh' akan memanggil foo.sh dan menjalankannya di latar belakang, dapatkan PID foo.sh dan tunggu hingga selesai, setelah selesai akan mulai loop 'bar.sh' dan selesaikan.
Skrip – foo.sh
#!/bin/bash
for i in 1 2 3 4 5
do
echo “foo.sh – Looping … number $i”
done
Skrip – bar.sh
#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
pid=$!
wait $pid
echo “Completed foo.sh”
for I in 1 2 3 4 5
do
echo “bar.sh – Looping … number $i”
done
Hasil
Started bar.sh
Started foo.sh
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
Contoh 2 – Script tanpa perintah wait
Kami memiliki dua skrip yang disebut skrip 'foo.sh' dan 'bar.sh'. skrip 'foo.sh' mencetak angka antara 1 hingga 5 dan skrip bar.sh akan memanggil foo.sh dan menjalankannya di latar belakang tetapi tidak akan menunggu foo.sh untuk menyelesaikan dan mengeksekusi kedua skrip.
Skrip – foo.sh
#!/bin/bash
for i in 1 2 3 4 5
do
echo “foo.sh – Looping … number $i”
done
Skrip – bar.sh
#!/bin/bash
echo “Started bar.sh”
echo “Started foo.sh”
./foo.sh &
echo “Completed foo.sh”
for I in 1 2 3 4 5
do
echo “bar.sh – Looping … number $i”
done
Hasil
Started bar.sh
Started foo.sh
Completed foo.sh
bar.sh – Looping .. number 1
bar.sh – Looping .. number 2
bar.sh – Looping .. number 3
bar.sh – Looping .. number 4
bar.sh – Looping .. number 5
Completed bar.sh
$
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
$
Contoh:3 – Skrip dengan perintah tunggu &status pengembalian
Skrip 'bar.sh' akan memanggil foo.sh dan menjalankannya di latar belakang, dapatkan PID dari foo.sh dan tunggu hingga selesai, setelah selesai, ia akan memulai loop bar.sh dan selesai, Akhirnya, ia mengembalikan kode keluar dari skrip foo.sh.
Skrip – foo.sh (Status keluar =0)
Skrip - foo.sh
#!/bin/bash
for i in 1 2 3 4 5
do
echo “foo.sh – Looping … number $i”
done
Skrip – bar.sh
#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?
if [ $stat –eq 0 ]
then
echo “Exit status - $stat”
else
echo “Exit status - $stat”
fi
Hasil
foo.sh – Looping .. number 1
foo.sh – Looping .. number 2
foo.sh – Looping .. number 3
foo.sh – Looping .. number 4
foo.sh – Looping .. number 5
Exit status - 0
$
Script – foo.sh (Status keluar =NON Nol)
Skrip - foo.sh
#!/bin/bash
for i in 1 2 3 4 5
do
iiecho “foo.sh – Looping … number $i”
done
Skrip – bar.sh
#!/bin/bash
./foo.sh &
BPID=$!
wait $BPID
stat=$?
if [ $stat –eq 0 ]
then
echo “Exit status - $stat”
else
echo “Exit status - $stat”
fi
Hasil
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
./foo.sh: line 4: iiecho: command not found
Exit status – 127
$
Kesimpulan
Tunggu dan Tidur keduanya adalah panggilan sistem berbasis waktu di sistem Operasi. Mari kita periksa perbedaan antara perintah wait dan sleep.
Tunggu:Ketika pengguna ingin menghentikan proses saat ini dan melepaskan semua sumber daya yang ditahan oleh proses dan menunggu beberapa proses lain untuk dieksekusi. Kita perlu menggunakan notify untuk membuat proses ini sadar bahwa mulai eksekusi lagi setelah menyelesaikan proses lain.
Tidur:Panggilan sistem ini digunakan ketika pengguna ingin menghentikan proses saat ini untuk beberapa waktu. Itu membuat kunci tetap pada sumber daya sampai waktu tidur berakhir dan lagi memulai eksekusi proses. Di sini proses memiliki kontrol sepanjang eksekusi. misalnya saya menjalankan beberapa perintah di bash dan ingin tidur selama beberapa waktu karena mengharapkan beberapa output dari perintah yang dieksekusi yang akan digunakan dalam eksekusi lebih lanjut dari proses saat ini.