Cách dùng lệnh wait trong Linux
Trong bài này mình sẽ giới thiệu lệnh wait trong Linux, đây là 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.
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.
Bài viết này được đăng tại [free tuts .net]
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ả:
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:
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 đó.
Trên là một vài cách sử dụng lệnh wait trong Linux nói chung và trong Bash script nói riêng. Đây là lệnh dùng để xử lý tiến trình rất tốt, mọi người học cho cẩn thận nhé.