Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Hệ điều hành Unix] Pending kết hợp chặn và bỏ qua

    Pending kết hợp chặn và bỏ qua

    Mỗi tín hiệu có một disposition: mặc định (DFL), bỏ qua (IGN), hoặc có handler (HND). Ngoài ra có mask (chặn). Xử lý sự kiện:

    • SET n DFL|IGN|HND: đặt disposition cho n (9/19 luôn DFL, lệnh SET với 9/19 bị bỏ qua).
    • BLOCK n / UNBLOCK n: chặn/bỏ chặn (9/19 không chặn được).
    • SIG n: tín hiệu đến.
      • Nếu bị chặn (và ≠ 9/19): pending (không trùng).
      • Ngược lại giao ngay: nếu disposition là IGN → vứt bỏ (không tính); nếu HND → đếm handled += 1; nếu DFL → đếm defaulted += 1.
    • Khi UNBLOCK n và n đang pending: giao ngay theo disposition hiện tại (cập nhật handled/defaulted, bỏ nếu IGN), xóa pending.

    Mẹo: một tín hiệu đang pending mà sau đó bị SET ... IGN thì khi giao sẽ bị vứt bỏ.

    In 3 số trên một dòng: <handled> <defaulted> <còn_pending> (số phần tử còn pending cuối cùng).

    Số hiệu Tên Hành động mặc định
    1 SIGHUP Term
    2 SIGINT Term
    3 SIGQUIT Core
    9 SIGKILL Term
    10 SIGUSR1 Term
    11 SIGSEGV Core
    12 SIGUSR2 Term
    13 SIGPIPE Term
    14 SIGALRM Term
    15 SIGTERM Term
    17 SIGCHLD Ign
    18 SIGCONT Cont
    19 SIGSTOP Stop
    20 SIGTSTP Stop

    Ví dụ

    Xem test mẫu.

    • Định dạng đầu vào:

      Nhiều dòng sự kiện như mô tả.

    • Ràng buộc đầu vào:

      Số sự kiện ≤ 2000.

    • Định dạng đầu ra:

      <handled> <defaulted> <số_pending_còn_lại>.

    Ví dụ:

    Đầu vào:

    SET 2 HND
    SIG 2
    SIG 2
    

    Đầu ra:

    2 0 0

    Giải thích:

    Tín hiệu 2 có handler, đến 2 lần không bị chặn → handled = 2.

    Đang tải editor...