Bởi vì trong UNIX / POSIX, mã thoát của chương trình được xác định là giá trị 8 bit không dấu. Chuyển đổi -1 thành 8 bit không dấu cho 255.
Chỉnh sửa để thêm:
Để cung cấp thêm chi tiết: họ chờ * () các lệnh gọi hệ thống trong UNIX mã hóa kết quả của một quá trình thành một số nguyên 32 bit duy nhất. 32 bit của kết quả đó được chia nhỏ hơn nữa để cung cấp thông tin như liệu lõi có bị đổ lõi, thoát ra do tín hiệu (và cái nào), v.v. Trong số 32 bit đó, chỉ có 8 bit được dành cho mã thoát của quy trình và những cái đó được hiểu là một giá trị không dấu.
Mô hình fork / exec / Wait của UNIX / POSIX là một trong những tính năng được nhúng sâu nhất và lâu đời nhất của nó; nếu bạn đang thiết kế một hệ điều hành mới ngày hôm nay, bạn có thể làm điều gì đó khác biệt (ít nhất là sử dụng 64 bit :-)).
Mặt khác, thực tế mà nói có thực sự hữu ích khi có> 255 mã thoát? Tôi nghi ngờ điều đó. Nếu bạn thực sự muốn thứ gì đó mạnh mẽ hơn, tôi khuyên bạn nên chuyển sang "chuỗi thoát", thay vì mã thoát số với phạm vi rộng hơn.