GNU/Linux >> Belajar Linux >  >> Linux

Perintah tunggu bash

wait adalah perintah yang menunggu pekerjaan yang diberikan selesai dan mengembalikan status keluar dari perintah yang ditunggu.

Sejak wait perintah mempengaruhi lingkungan eksekusi shell saat ini, ini diimplementasikan sebagai perintah bawaan di sebagian besar shell.

Dalam artikel ini, kita akan menjelajahi wait bawaan Bash perintah.

Bash wait Perintah #

Sintaks umum wait built-in mengambil bentuk berikut:

wait [options] ID

ID adalah proses atau ID pekerjaan. Jika tidak ada ID ditentukan, perintah menunggu sampai semua pekerjaan latar belakang anak selesai.

wait perintah mengembalikan status keluar dari perintah terakhir yang ditunggu.

Misalnya, untuk menunggu proses latar belakang dengan PID 7654 , Anda akan menggunakan:

wait 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. Spesifikasi pekerjaan dimulai dengan simbol persentase diikuti dengan nomor pekerjaan (%n ). Ini contohnya:

Jalankan perintah di latar belakang:

rsync -a /home /tmp/home &

ID pekerjaan shell (dilingkari dengan tanda kurung) dan ID proses akan ditampilkan di terminal Anda:

[2] 54377

Untuk menunggu pekerjaan, jalankan wait perintah diikuti dengan spesifikasi pekerjaan:

wait %2

Saat dipanggil dengan -n 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, wait -n menunggu pekerjaan latar belakang selesai dan mengembalikan status keluar pekerjaan.

wait -n 45432 54346 76573

Pada contoh di atas, wait -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:

wait -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".

-f opsi memberitahu wait 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 perintah interaktif.

Contoh #

wait biasanya digunakan dalam skrip shell yang menelurkan proses anak yang dijalankan secara paralel.

Untuk mengilustrasikan cara kerja perintah, buat skrip berikut:

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

Mari kita jelaskan kode baris demi baris:

  1. Baris pertama disebut shebang dan memberi tahu sistem operasi penerjemah mana yang akan digunakan untuk mengurai sisa file.
  2. Kami menggunakan sleep perintah untuk meniru proses latar belakang yang memakan waktu.
  3. $! adalah variabel Bash internal yang menyimpan PID dari pekerjaan terakhir yang dijalankan di latar belakang. Dalam contoh ini, itu adalah PID dari sleep memerintah. Kami menyimpan PID dalam variabel (process_id ).
  4. Mencetak nomor PID.
  5. PID diteruskan ke wait perintah yang menunggu sampai sleep perintah selesai.
  6. Mencetak status keluar dari wait memerintah. $? adalah variabel Bash internal yang menyimpan status keluar dari perintah terakhir yang dieksekusi.

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

PID: 36353
Exit status: 0

Berikut contoh menggunakan -n pilihan:

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

Ketika skrip dieksekusi, itu memunculkan 3 proses latar belakang. wait -n menunggu sampai pekerjaan pertama selesai dan pernyataan gema dicetak. wait menunggu semua pekerjaan latar belakang anak selesai.

first job completed
all jobs completed

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

sleep 3600 &
[1] 46671

Tunggu prosesnya:

wait 46671

Buka terminal lain dan hentikan proses dengan kill perintah:

kill -STOP 46671

Setelah status proses diubah, wait perintah akan menyelesaikan dan mengembalikan kode keluar proses.

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

sleep 3600 &wait -f 46671

Hentikan proses dari terminal lain:

kill -STOP 46671

Kali ini wait perintah tidak akan selesai. Ini akan berjalan sampai sleep proses berakhir.

Kesimpulan #

wait perintah menunggu pekerjaan yang ditentukan selesai dan mengembalikan kode keluar dari pekerjaan.


Linux
  1. perintah ekspor bash

  2. bash sh - perintah tidak ditemukan

  3. Bash - Perintah tanggal dan spasi

  1. Perintah "eval" Di Bash?

  2. memulai apachectl dari bash

  3. Jalankan perintah bash pada pipa jenkins

  1. Perintah Bash wait dengan Contoh

  2. Bash:tunggu dengan batas waktu

  3. Bash jika dalam satu baris