Trên x86 (hoặc 64-bit hoặc 32-bit) Linux - ví dụ:Trong trình xử lý tín hiệu, làm cách nào để biết chương trình bị gián đoạn ở đâu?
void signal_handler(int) {
// want to know where the program is interrupted ...
}
int main() {
...
signal(SIGALRM, signal_handler);
alarm(5);
...
printf(...); <------- at this point, we trigger signal_handler
...
}
Trong signal_handler, làm thế nào chúng ta có thể biết chúng ta đang bị gián đoạn tại printf trong main()?
Cảm ơn rất nhiều! Đây là những gì tôi cần! – flyingbin
printf nói chung là không reentrant, vì vậy nếu bạn xảy ra được printf khi bạn nhận được tín hiệu, điều này có thể sẽ in rác hoặc tai nạn ... –
@ Chris: Vâng, tôi biết. Chương trình mẫu này hoạt động tốt trên chính nó (có thể), và đó là cách dễ nhất để chứng minh nguyên tắc.Nhưng đó là lý do tại sao tôi bao gồm các bình luận và gọi nó là "nguyên mẫu mã" :-) – Nemo