Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
522 views
in Technique[技术] by (71.8m points)

sigaction - Why only async-safe functions should be called from a signal handler?

I understand that, from a signal handler function sigaction() I should only call those functions that are "async-safe". But why is so?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Calling an unsafe function may lead to undefined behavior.

The Open Group Base Specifications Issue 7 (POSIX.1-2008), in its treatment of "Signal Concepts", says:

[W]hen a signal interrupts an unsafe function ... and the signal-catching function calls an unsafe function, the behavior is undefined.

As to why unsafe functions are unsafe, there may be many reasons in a given implementation.

However, a previous version of the standard, Issue 6 (POSIX.1-2004), hints at one possible reason on some implementations. That version describes async-signal-safe functions as "either reentrant or non-interruptible by signals". So, consider a function which relies on static data to keep state but is interrupted by itself midway through its execution — can that data be trusted once control returns to the interrupted function?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...