Signals là các thông điệp khác nhau được gởi đến tiến trình nhằm thông báo cho tiến trình một tình huống. Mỗi tín hiệu có thể kết hợp hoặc có sẵn bộ xử lý tín hiệu (signal handler). Signals sẽ ngắt ngang quá trình xử lý của tiến trình, bắt hệ thống chuyển sang gọi bộ xử lý tín hiệu ngay tức khắc. Khi kết thúc xử lý tín hiệu, tiến trình lại tiếp tục thực thi.
1. Một số signals thường dùng trong linux
|
Tên signal |
Số hiệu signal |
Miêu tả |
| SIGHUP | 1 | Trì hoãn việc kiểm tra trên quản lý terminal hoặc sự dừng của quản lý tiến trình. |
| SIGINT | 2 | Được thông báo nếu người sử dụng gửi một tín hiệu ngắt (Ctrl+C). |
| SIGQUIT | 3 | Được thông báo nếu người sử dụng gửi một tín hiệu bỏ (Ctrl+D). |
| SIGFPE | 8 | Được thông báo nếu một hoạt động thuộc về toán không hợp pháp được thử chạy. |
| SIGKILL | 9 | Nếu một tiến trình nhận signal này, nó phải thoát ra ngay lập tức và sẽ không thực hiện các hoạt động làm sạch. |
| SIGALRM | 14 | Tín hiệu báo số lần thực hiện (Alarm Clock). |
| SIGTERM | 15 | Tín hiệu kết thúc phần mềm (được gửi bởi sigkill theo mặc định). |
2. Sử dụng signals với Kill
Trên dịch vụ của bạn, để kiểm tra các signals đang được hỗ trợ, bạn dùng lệnh sau
$ kill -l

Có một vài phương thức trong việc gửi các signal tới một chương trình hoặc một script. Một trong những phương thức phổ biến nhất là cho người sử dụng gõ phím Ctrl +C hoặc phím dừng trong khi một script đang chạy.
Khi bạn nhấn phím Ctrl+C, một SIGINT được gửi tới script và khi mỗi hành động mặc định đã xác định sẽ kết thúc script.
Một ví dụ khác sử dụng bằng cách nhập lệnh trực tiếp từ bàn phím và sử dụng lệnh kill để dừng pid 30906 :
$ ps -xu


$ kill -signal pid
Vd: kill -1 30906
3. Sử dụng signals với Trap
Khi bạn nhấn phím Ctrl+C hoặc phím dừng tại terminal của bạn trong suốt quá trình chạy một chương trình shell, thông thường thì chương trình đó bị ngay lập tức kết thúc, và dòng nhắc lệnh xuất hiện trở lại. Việc này có thể sẽ không luôn luôn làm bạn thích thú. Ví dụ, bạn có thể sẽ để lại hàng loạt các tập tin tạm thời mà không được dọn sạch.
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
Khi trap này được thực thi, hai tệp work1$$ và dataout$$ sẽ tự động bị dỡ bỏ nếu signal số 2 được nhận bởi chương trình.
Vì thế nếu người sử dụng ngắt việc thi hành của chương trình thì sau đó trap này được chạy, bạn có thể được đảm bảo chắc chắn rằng hai file này sẽ được dọn sạch sẽ. Lệnh exit mà theo sau bởi rm là cần thiết bởi vì không có nó thì chương trình sẽ tiếp tục chạy tại điểm mà nó dừng lại khi signal được nhận.
Chúc bạn thực hiện thành công!
THAM KHẢO CÁC DỊCH VỤ TẠI VINAHOST
>> SERVER – COLOCATION – CDN giá rẻ
>> Cloud Server giá rẻ – VPS
>> HOSTING
>> WEBSITE
>> TÊN MIỀN