Tôi đã ngạc nhiên với nhận xét này trong câu hỏi khác:
Gửi dd tín hiệu USR1 quá sớm sau khi nó bắt đầu (nghĩa là trong tập lệnh bash, dòng sau khi bạn khởi động nó) thực tế sẽ chấm dứt nó
Ai có thể giải thích tại sao ?
Tôi đã ngạc nhiên với nhận xét này trong câu hỏi khác:
Gửi dd tín hiệu USR1 quá sớm sau khi nó bắt đầu (nghĩa là trong tập lệnh bash, dòng sau khi bạn khởi động nó) thực tế sẽ chấm dứt nó
Ai có thể giải thích tại sao ?
Câu trả lời:
Mỗi tín hiệu có một "bố trí mặc định" - mặc định một quá trình thực hiện khi nhận được tín hiệu đó. Có một bảng trong signal(7)
trang người đàn ông liệt kê chúng:
Signal Value Action Comment
──────────────────────────────────────────────────────────────────────
...
SIGUSR1 30,10,16 Term User-defined signal 1
SIGUSR2 31,12,17 Term User-defined signal 2
SIGUSR1
và SIGUSR2
cả hai đều có hành động mặc định Term
- quá trình kết thúc. dd
đăng ký một trình xử lý để chặn tín hiệu và làm điều gì đó hữu ích với nó, nhưng nếu bạn báo hiệu quá nhanh thì vẫn chưa có thời gian để đăng ký trình xử lý đó, vì vậy hành động mặc định sẽ xảy ra
strace
đầu ra trong tập lệnh shell)
{ dd if=/dev/zero of=/dev/null & }; kill -USR1 $!; jobs; sleep 1; jobs
để tái tạo hiệu ứng bạn đang mô tả.