Hướng dẫn sử dụng lệnh wait trong Linux

Hướng dẫn chi tiết cách sử dụng lệnh wait trong Linux - một trong những lệnh được sử dụng rất nhiều khi viết các chương trình bash script hoặc shell script.

Wait là lệnh dùng để đợi một thời gian cho tới khi công việc nào đó hoàn thành và trả kết quả trạng thái thoát về từ lệnh đã đợi đó. Vì lệnh wait ảnh hưởng đến môi trường thực thi của shell nên nó được thích hợp sẵn trên hầu hết các phiên bản shell.

Hướng dẫn sử dụng lệnh wait trong Linux

1. Cú pháp lệnh wait trong Linux

Cú pháp chung của lệnh wait như sau:

wait [options] ID

Trong đó ID là mã tiến trình hoặc mã của một công việc (job ID) nào đó. Nếu bạn không chỉ định rõ ID thì nó sẽ chờ cho đến khi tất cả các công việc và tiến trình hoàn thành. Lúc này lệnh wait sẽ trả về trạng thái của lệnh cuối cùng hoàn hành.

Ví dụ: Để đợi một tiền trình chạy nền có PID 7654 thì bạn sẽ sử dụng cú pháp sau.

wait 7654

Khi nhiều quy trình được đưa ra thì lệnh wait sẽ đợi cho tất cả các quy trình hoàn tất.

ID công việc (job ID) được xác định bằng cách sử dụng đặc tả công việc (“jobspec”), đây là một cách để đề cập đến các quy trình tạo nên công việc. Một jobspec bắt đầu bằng ký hiệu phần trăm theo sau là số công việc (% n).

rsync -a /home /tmp/home &

Lệnh này trả về kết quả như sau:

[2] 54377

Trong đó số 2 là ID công việc, còn 54377 là ID của tiến trình.

Để chờ một công việc thì sử dụng cú pháp sau:

wait %2

2. Một vài ví dụ với lệnh wait trong Linux

Sau đây ta sẽ làm một vài ví dụ nhé.

Sử dụng lệnh wait để chờ nhiều tiến trình

Hãy xét ví dụ sau:

#!/bin/bash
echo "testing wait command1" &
process_id=$!
echo "testing wait command2" &
wait $process_id
echo Job 1 exited with status $?
wait $!
echo Job 2 exited with status $?

Kết quả:

w 1 png

Sau khi chạy tập lệnh này thì có hai tiến trình sẽ chạy trong nền background đó là hai lệnh echo. ID tiến trình lệnh echo đầu tiên sẽ lưu trong biến process_id.

  • Trước tiên, hai lệnh echo sẽ in ra màn hình hai dòng thông báo.
  • Tiếp theo, lệnh wait $process_id sẽ đợi cho tiến trình đầu tiên được hoàn thành rồi mới in ra dòng "Job 1 exited with status 0".
  • Tiếp theo lệnh wait $! sẽ chờ đợi tiến trình thứ hai được hoàn thành rồi mới in ra dòng "Job 2 exited with status 0".

Lưu ý: $! chính là ID của tiến trình cuối cùng, vì vậy đoạn code cuối cùng mình không cần phải gán nó vào một biến lưu trữ riêng.

Sử dụng lệnh wait sau khi sử dụng lệnh kill

Xét chương trình bash script dưới đây:

#!/bin/bash
echo "Testing wait command"
sleep 20 &
pid=$!
kill $pid
wait $pid
echo $pid was terminated.

Như bạn thấy, lệnh wait sẽ chờ tiến trình có id là $pid, trong khi nó đã bị lệnh kill hủy ở phía trên. Vì vậy kết quả sẽ như sau:

w1 1 png

Vì lệnh kill đã hủy tiến trình $pid nên lệnh wait lúc này đang thực thi với một pid đã kết thúc, vì vậy đầu ra sẽ hiển thị PID của tiến trình đó.

Chúc bạn thành thạo sử dụng lệnh wait trong Linux!

Nguồn: freetuts