Thứ Sáu, 28 tháng 7, 2023

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.

Mục lục

  • 1. Cú pháp lệnh wait trong Linux
  • 2. Một vài ví dụ với lệnh wait trong Linux
    • Sử dụng lệnh wait để chờ nhiều tiến trình
    • Sử dụng lệnh wait sau khi sử dụng lệnh kill

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

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

1
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 [tranvanbinh.vn]

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.

1
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).

1
rsync -a /home /tmp/home &

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

1
[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:

1
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:

1
2
3
4
5
6
7
8
#!/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:

1
2
3
4
5
6
7
#!/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 đó.

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é.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master