Tín hiệu - Lệnh Linux / Unix

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 SIGKILLSIGSTOP 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 SIGXCPUSIGXFSZ 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:

  1. 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.
  2. 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_pidsi_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.
  3. 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.