use POSIX qw(WEXITSTATUS WIFEXITED);
if(WIFEXITED($?)) {
print "The exit status was ", WEXITSTATUS($?), "\n";
}
Xem thêm WIFSIGNALED
và WTERMSIG
.
Một C vĩ mô hữu ích là WCOREDUMP
, tài liệu trong thư viện GNU C (với sự nhấn mạnh thêm)
WCOREDUMP(status)
trả về true nếu đứa trẻ được sản xuất một bãi chứa lõi. Macro này chỉ nên được sử dụng nếu WIFSIGNALED trả về true. Macro này không được chỉ định trong POSIX.1-2001 và không có sẵn trên một số triển khai Unix (ví dụ: AIX, SunOS). Chỉ sử dụng phần đính kèm này trong & hellip; #endif
.
Kể từ version 5.10.0, perl includes WCOREDUMP
trong tính toán của mình về giá trị của $?
nếu vĩ mô hiện có sẵn trên hệ thống của bạn, như tài liệu trong perlvar:
Do đó, giá trị xuất cảnh của tiến trình con thực sự là ($?>> 8)
và $? & 127
đưa ra tín hiệu nào, nếu có, quá trình này bị chết và $? & 128
báo cáo liệu có một kết xuất lõi hay không.
Tôi sẽ tìm hiểu thêm về '$? >> 8', vì 8 bit cuối cùng này thường là giá trị đã ký: '($ exit) = giải nén (" c ", gói (" S ", ($? >> 8)))'. – Ouki
@Ouki, 'gói" S "' dự kiến giá trị 16 bit, nhưng tôi chân thành nghi ngờ rằng '$? >> 8' là 16 bit (vì điều đó sẽ làm cho toàn bộ số lượng 3 byte dài). Nhưng cho phép nói nó là trong một giây. Sau đó, bạn bị hỏng số bằng cách chỉ giải nén 8 trong số 16 bit. Mã đó không chính xác. – ikegami
Đây không phải là, nhưng 'gói (" c ", ($? >> 8))' sẽ giúp bạn có được một cảnh báo. – Ouki