Linux hỗ trợ cả tín hiệu đáng tin cậy POSIX (sau đây là "tín hiệu chuẩn") và tín hiệu thời gian thực POSIX.
Tín hiệu chuẩn
Linux hỗ trợ các tín hiệu tiêu chuẩn được liệt kê dưới đây. Một số số tín hiệu phụ thuộc vào kiến trúc, như được chỉ ra trong cột "Giá trị". (Trong trường hợp ba giá trị được đưa ra, giá trị đầu tiên thường là hợp lệ cho alpha và sparc, giá trị trung bình cho i386, ppc và sh, và giá trị cuối cùng cho mips.
A - biểu thị rằng một tín hiệu không có trên kiến trúc tương ứng.)
Các mục trong cột "Hành động" của bảng chỉ định hành động mặc định cho tín hiệu, như sau:
Kỳ hạn
Hành động mặc định là chấm dứt quá trình.
Bỏ qua
Hành động mặc định là bỏ qua tín hiệu.
Cốt lõi
Hành động mặc định là chấm dứt quá trình và kết xuất lõi.
Dừng lại
Hành động mặc định là ngừng quá trình.
Đầu tiên các tín hiệu được mô tả trong tiêu chuẩn POSIX.1 ban đầu.
Tín hiệu | Giá trị | Hoạt động | Bình luận |
hoặc cái chết của quá trình kiểm soát | |||
SIGINT | 2 | Kỳ hạn | Ngắt từ bàn phím |
SIGQUIT | 3 | Cốt lõi | Thoát khỏi bàn phím |
SIGILL | 4 | Cốt lõi | Hướng dẫn bất hợp pháp |
SIGABRT | 6 | Cốt lõi | Hủy bỏ tín hiệu từ hủy bỏ (3) |
SIGFPE | số 8 | Cốt lõi | Ngoại lệ dấu chấm động |
SIGKILL | 9 | Kỳ hạn | Giết tín hiệu |
SIGSEGV | 11 | Cốt lõi | Tham chiếu bộ nhớ không hợp lệ |
SIGPIPE | 13 | Kỳ hạn | Ống bị hỏng: ghi vào đường ống mà không có độc giả |
SIGALRM | 14 | Kỳ hạn | Tín hiệu hẹn giờ từ báo động (2) |
SIGTERM | 15 | Kỳ hạn | Tín hiệu chấm dứt |
SIGUSR1 | 30,10,16 | Kỳ hạn | Tín hiệu do người dùng định nghĩa 1 |
SIGUSR2 | 31,12,17 | Kỳ hạn | Tín hiệu do người dùng xác định 2 |
SIGCHLD | 20,17,18 | Bỏ qua | Trẻ bị ngừng hoặc chấm dứt |
SIGCONT | 19,18,25 | Tiếp tục nếu đã dừng | |
SIGSTOP | 17,19,23 | Dừng lại | Dừng quá trình |
SIGTSTP | 18,20,24 | Dừng lại | Ngừng nhập tại tty |
SIGTTIN | 21,21,26 | Dừng lại | đầu vào tty cho quá trình nền |
SIGTTOU | 22,22,27 | Dừng lại | đầu ra tty cho quá trình nền |
Các tín hiệu SIGKILL và SIGSTOP không thể bị bắt, chặn hoặc bỏ qua.
Tiếp theo các tín hiệu không có trong tiêu chuẩn POSIX.1 nhưng được mô tả trong SUSv2 và SUSv3 / POSIX 1003.1-2001.
Tín hiệu | Giá trị | Hoạt động | Bình luận |
SIGPOLL | Kỳ hạn | Sự kiện có thể gây ô nhiễm (Sys V). Đồng nghĩa của SIGIO | |
SIGPROF | 27,27,29 | Kỳ hạn | Đồng hồ hóa hồ sơ đã hết hạn |
SIGSYS | 12, -, 12 | Cốt lõi | Đối số không hợp lệ đối với thường trình (SVID) |
SIGTRAP | 5 | Cốt lõi | Trace / breakpoint trap |
SIGURG | 16,23,21 | Bỏ qua | Tình trạng khẩn cấp trên ổ cắm (4.2 BSD) |
SIGVTALRM | 26,26,28 | Kỳ hạn | Đồng hồ báo thức ảo (4.2 BSD) |
SIGXCPU | 24,24,30 | Cốt lõi | Đã vượt quá giới hạn thời gian CPU (4.2 BSD) |
SIGXFSZ | 25,25,31 | Cốt lõi | Đã vượt quá giới hạn kích thước tệp (4,2 BSD) |
Tính đến và bao gồm cả Linux 2.2, hành vi mặc định cho SIGSYS , SIGXCPU , SIGXFSZ và (trên các kiến trúc khác ngoài SPARC và MIPS) SIGBUS đã chấm dứt quá trình (không có một kết xuất lõi). (Trên một số Unices khác, hành động mặc định cho SIGXCPU và SIGXFSZ là chấm dứt quá trình mà không có kết xuất lõi.) Linux 2.4 tuân thủ các yêu cầu POSIX 1003.1-2001 đối với các tín hiệu này, chấm dứt quá trình với một kết xuất lõi.
Tiếp theo các tín hiệu khác.
Tín hiệu | Giá trị | Hoạt động | Bình luận |
SIGEMT | 7, -, 7 | Kỳ hạn | |
SIGSTKFLT | -, 16, - | Kỳ hạn | Stack lỗi trên coprocessor (không sử dụng) |
SIGIO | 23,29,22 | Kỳ hạn | I / O bây giờ có thể (4.2 BSD) |
SIGCLD | -, -, 18 | Bỏ qua | Một từ đồng nghĩa cho SIGCHLD |
SIGPWR | 29,30,19 | Kỳ hạn | Mất điện (Hệ thống V) |
SIGINFO | 29, -, - | Từ đồng nghĩa với SIGPWR | |
SIGLOST | -, -, - | Kỳ hạn | Khóa tệp bị mất |
SIGWINCH | 28,28,20 | Bỏ qua | Tín hiệu thay đổi kích thước cửa sổ (4.3 BSD, Sun) |
SIGUNUSED | -, 31, - | Kỳ hạn | Tín hiệu chưa sử dụng (sẽ là SIGSYS) |
(Tín hiệu 29 là SIGINFO / SIGPWR trên một alpha nhưng SIGLOST trên một sparc.)
SIGEMT không được chỉ định trong POSIX 1003.1-2001, nhưng không bao giờ xuất hiện trên hầu hết các Unices khác, nơi hành động mặc định của nó thường là chấm dứt quá trình với một kết xuất lõi.
SIGPWR (không được chỉ định trong POSIX 1003.1-2001) thường bị bỏ qua theo mặc định trên các Unices khác mà nó xuất hiện.
SIGIO (không được chỉ định trong POSIX 1003.1-2001) được bỏ qua theo mặc định trên một vài Unices khác.
Tín hiệu thời gian thực
Linux hỗ trợ tín hiệu thời gian thực như được định nghĩa ban đầu trong phần mở rộng thời gian thực POSIX.4 (và hiện được bao gồm trong POSIX 1003.1-2001). Linux hỗ trợ 32 tín hiệu thời gian thực, được đánh số từ 32 ( SIGRTMIN ) đến 63 ( SIGRTMAX ). (Các chương trình nên luôn luôn tham khảo các tín hiệu thời gian thực sử dụng ký hiệu SIGRTMIN + n, vì phạm vi của các số hiệu thời gian thực thay đổi trên các Unices.)
Không giống như tín hiệu tiêu chuẩn, tín hiệu thời gian thực không có ý nghĩa được xác định trước: toàn bộ các tín hiệu thời gian thực có thể được sử dụng cho các mục đích do ứng dụng xác định. (Lưu ý, tuy nhiên, việc triển khai LinuxThreads sử dụng ba tín hiệu thời gian thực đầu tiên.)
Hành động mặc định cho tín hiệu thời gian thực không được xử lý là để chấm dứt quá trình nhận.
Các tín hiệu thời gian thực được phân biệt bởi những điều sau đây:
- Nhiều trường hợp tín hiệu thời gian thực có thể được xếp hàng đợi. Ngược lại, nếu nhiều trường hợp tín hiệu tiêu chuẩn được phân phối trong khi tín hiệu đó hiện bị chặn thì chỉ có một phiên bản được xếp hàng đợi.
- Nếu tín hiệu được gửi bằng sigqueue (2), một giá trị đi kèm (hoặc là một số nguyên hoặc một con trỏ) có thể được gửi cùng với tín hiệu. Nếu quá trình tiếp nhận thiết lập một trình xử lý cho tín hiệu này bằng cách sử dụng cờ SA_SIGACTION để sigaction (2) thì nó có thể lấy dữ liệu này thông qua trường si_value của cấu trúc siginfo_t được chuyển làm đối số thứ hai cho trình xử lý. Hơn nữa, các trường si_pid và si_uid của cấu trúc này có thể được sử dụng để lấy PID và ID người dùng thực của quá trình gửi tín hiệu.
- Tín hiệu thời gian thực được phân phối theo thứ tự được đảm bảo. Nhiều tín hiệu thời gian thực cùng loại được phân phối theo thứ tự chúng được gửi đi. Nếu các tín hiệu thời gian thực khác nhau được gửi đến một quá trình, chúng sẽ được phân phối bắt đầu bằng tín hiệu được đánh số thấp nhất. (Tức là, tín hiệu số thấp có ưu tiên cao nhất.)
Nếu cả hai tín hiệu tiêu chuẩn và thời gian thực đang chờ xử lý, POSIX sẽ để nó không được chỉ định trước tiên. Linux, giống như nhiều triển khai khác, ưu tiên cho các tín hiệu tiêu chuẩn trong trường hợp này.
Theo POSIX, việc triển khai sẽ cho phép ít nhất _POSIX_SIGQUEUE_MAX (32) tín hiệu thời gian thực được xếp hàng đợi cho một quá trình. Tuy nhiên, thay vì đặt giới hạn cho mỗi quá trình, Linux áp đặt giới hạn trên toàn hệ thống về số lượng tín hiệu thời gian thực được xếp hàng đợi cho tất cả các quy trình.
Giới hạn này có thể được xem (và với đặc quyền) thay đổi thông qua tập tin / proc / sys / kernel / rtsig-max . Một tập tin liên quan, / proc / sys / kernel / rtsig-max , có thể được sử dụng để tìm hiểu có bao nhiêu tín hiệu thời gian thực hiện đang xếp hàng đợi.
CHUYỂN ĐỔI ĐẾN
POSIX.1
Quan trọng: Sử dụng lệnh man ( % man ) để xem cách một lệnh được sử dụng trên máy tính cụ thể của bạn.