गैर syscall के रैपर से Async-सिग्नल सुरक्षित कार्य की एक सूची snprintf की तरह कुछ() dprintf) की जरूरत है, (मैं लेकिन glibc
उत्तर
man 7 signal-safety
के अंत में नवीनतम संस्करण रुचि सूची शामिल: और खोज `Async-संकेत safe` signal-safety.7.html
मैं बहुत यकीन है कि आप
documentation
को देखने के लिए संपादित करें: फिर this list के बारे में कैसे?
man signal
से
:
NOTES
The effects of this call in a multi-threaded process are unspecified.
The routine handler must be very careful, since processing elsewhere
was interrupted at some arbitrary point. POSIX has the concept of "safe
function". If a signal interrupts an unsafe function, and handler
calls an unsafe function, then the behavior is undefined. Safe func-
tions are listed explicitly in the various standards. The POSIX.1-2003
list is
_Exit() _exit() abort() accept() access() aio_error() aio_return()
aio_suspend() alarm() bind() cfgetispeed() cfgetospeed() cfsetispeed()
cfsetospeed() chdir() chmod() chown() clock_gettime() close() connect()
creat() dup() dup2() execle() execve() fchmod() fchown() fcntl() fdata-
sync() fork() fpathconf() fstat() fsync() ftruncate() getegid()
geteuid() getgid() getgroups() getpeername() getpgrp() getpid() getp-
pid() getsockname() getsockopt() getuid() kill() link() listen()
lseek() lstat() mkdir() mkfifo() open() pathconf() pause() pipe()
poll() posix_trace_event() pselect() raise() read() readlink() recv()
recvfrom() recvmsg() rename() rmdir() select() sem_post() send()
sendmsg() sendto() setgid() setpgid() setsid() setsockopt() setuid()
shutdown() sigaction() sigaddset() sigdelset() sigemptyset() sig-
fillset() sigismember() signal() sigpause() sigpending() sigprocmask()
sigqueue() sigset() sigsuspend() sleep() socket() socketpair() stat()
symlink() sysconf() tcdrain() tcflow() tcflush() tcgetattr() tcgetp-
grp() tcsendbreak() tcsetattr() tcsetpgrp() time() timer_getoverrun()
timer_gettime() timer_settime() times() umask() uname() unlink()
utime() wait() waitpid() write().
According to POSIX, the behaviour of a process is undefined after it
ignores a SIGFPE, SIGILL, or SIGSEGV signal that was not generated by
the kill(2) or the raise(3) functions. Integer division by zero has
undefined result. On some architectures it will generate a SIGFPE sig-
nal. (Also dividing the most negative integer by -1 may generate
SIGFPE.) Ignoring this signal might lead to an endless loop.
See sigaction(2) for details on what happens when SIGCHLD is set to
SIG_IGN.
The use of sighandler_t is a GNU extension. Various versions of libc
predefine this type; libc4 and libc5 define SignalHandler, glibc
defines sig_t and, when _GNU_SOURCE is defined, also sighandler_t.
कि दस्तावेज़ों में सुरक्षा के बारे में आवश्यक जानकारी शामिल नहीं है –
कि सूची सिस्को की सूची है। मुझे यह बहुत याद है। लेकिन मुझे glibc –
से फ़ंक्शंस की सूची की आवश्यकता है हां, उस सूची में ज्यादातर सिस्टम कॉल शामिल हैं, लेकिन यह है कि जीएलबीबीसी क्या है; एक __system__ इंटरफ़ेस_। मैं इसे लेता हूं कि अन्य मानक सी फ़ंक्शन __not__ सिग्नल सुरक्षित हैं क्योंकि वे यहां सूचीबद्ध नहीं हैं, या कम से कम मैं उन्हें सूचीबद्ध करने वाले अन्य (POSIX) मानकों के लिए _any_ आधिकारिक पॉइंटर्स नहीं ढूंढ पा रहा हूं। – Kimvais
यह निर्धारित करने के लिए मुश्किल लगता है, आप नहीं जानते कि क्या यादृच्छिक असुरक्षित समारोह एक पुस्तकालय दिनचर्या कॉल करने के लिए तय कर सकते हैं। यह सूची ग्लिब के विभिन्न संस्करणों के बीच अलग हो सकती है, या यदि आप इसे किसी अन्य यूनिक्स जैसी प्रणाली में ले जाते हैं। ऐसा लगता है कि आपको जवाब खोजने के लिए बहुत से कॉल स्टैक का विश्लेषण करना होगा, और यहां तक कि यह संस्करण से संस्करण तक थोड़ा सा धक्का हो सकता है, distro से distro।
शायद आप वैकल्पिक डिजाइन दृष्टिकोण की तलाश नहीं कर रहे हैं, लेकिन ऐसा लगता है कि एक बेहतर रणनीति होगी: यदि आपके प्रोग्राम में इवेंट लूप है, सिग्नल हैंडलर को बहुत बेवकूफ बनाओ और बस कुछ राज्य स्थापित करें कि इवेंट लूप उठाएगा । इस तरह आप सिग्नल हैंडलर के बाहर सार्थक काम करते हैं।
उदाहरण: मान लें कि आपको poll()
लूप कहीं मिला है। हो सकता है कि आप एक पाइप शामिल कर सकें जो सिग्नल हैंडलर लिख सकता है। फिर poll()
लूप कुछ गैर-तुच्छ कार्य करता है जो उस पर संकेतित होने के आधार पर करता है।
मुझे आवेदन की दुर्घटना के बाद एसआईजीएसईजीवी हैंडलर में इसकी आवश्यकता है। –
मैं क्रैश पर ढेर खोलना चाहता हूं –
मुझे एप्लिकेशन के दुर्घटना के बाद SIGSEGV हैंडलर में इसकी आवश्यकता है।
आमतौर
abort
एक कोर डंप है, जो करने के लिए एक डिबगर के माध्यम से चलाया जा सकता है कारण होगा:मैं दुर्घटना
पर स्टैक आप एक स्टैक ट्रेस पर कब्जा करने के प्रयास कर रहे हैं चाहते हैं स्टैक ट्रेस का उत्पादन करें।
वैकल्पिक रूप से, एक कच्चे (लेकिन संकेत सुरक्षित) ऐसा करने का तरीका fork
और exec
के लिए एक अलग उपयोगिता (जैसे, "pstack") उत्पादन करने के लिए अपने दुर्घटनाग्रस्त हो गया काम का एक स्टैक ट्रेस किया जाएगा। जब exec
-ing (fork
-ing के बाद, बच्चे में), आपको getppid
का उपयोग करके अपनी प्रक्रिया आईडी पास करनी होगी; और माता-पिता में abort
पर कॉल करने से पहले, इसे समाप्त करने के लिए आपको wait
की आवश्यकता होगी।
दूसरी ओर, यदि आप (जैसे सी ++ विनाशकर्ता कहा जाता हो सुनिश्चित करने, आदि) SIGSEGV के बाद एक "क्लीन" बाहर निकलें करने के लिए कोशिश कर रहे हैं - तो आप चेतावनी दी जानी चाहिए कि POSIX का कहना है:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_02:
यह एक SIGFPE, SIGILL, SIGSEGV, या SIGBUS संकेत है कि मारने के द्वारा उत्पन्न नहीं किया गया था(), sigqueue() पर ध्यान नहीं देता, या बढ़ाने के बाद एक प्रक्रिया के व्यवहार अपरिभाषित है()।
और http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_03:
बाद यह एक SIGBUS, SIGFPE, SIGILL, या SIGSEGV संकेत है कि द्वारा उत्पन्न नहीं किया गया था के लिए एक संकेत को पकड़ने समारोह से सामान्य रूप से देता है एक प्रक्रिया के व्यवहार अपरिभाषित है मारो(), sigqueue(), या उठाओ()।
- 1. लिंक glibc स्थिर लेकिन जीसीसी
- 2. glibc बैकट्रैक -
- 3. valgrind glibc
- 4. glibc फ़ंक्शन?
- 5. glibc हीप संगति जांच
- 6. जीसीसी/ld glibc.2.6
- 7. कॉल गेटिड बुद्धिमान glibc
- 8. glibc और एसएसई कार्यक्षमता
- 9. glibc, glib और gnulib
- 10. अपनी खुद की glibc संकलित
- 11. एक भी मेजबान पर एकाधिक glibc पुस्तकालयों
- 12. POSIX और Linux/glibc sched_ * फ़ंक्शंस
- 13. एंड्रॉयड स्टेटिक लिंकिंग गतिशील लिंकिंग बनाम glibc
- 14. glibc: elf फ़ाइल ओएस एबीआई अमान्य
- 15. मॉडलिंग "मैं एक * हूं लेकिन मैं भी ** **
- 16. प्रोग्रामिंग जावास्क्रिप्ट सीखना, लेकिन मैं
- 17. क्या होगा यदि मैं एक बुरा glibc डबल मुक्त त्रुटि के साथ
- 18. कैसे बताएं कि glibc का उपयोग किया जाता है
- 19. मुझे यह त्रुटि मिलती है: "glibc पता चला"
- 20. मैं एक विशिष्ट glibc संस्करण से कैसे लिंक कर सकता हूं?
- 21. स्क्रैच से लिनक्स बनाने के दौरान glibc त्रुटि
- 22. x86_64/linux पर glibc की तुलना में तेज़ गणित लाइब्रेरी?
- 23. हमारे लिनक्स ऐप में libc (glibc) की क्या भूमिका है?
- 24. पोस्टफिक्स इसकी स्थापित लेकिन मैं कैसे
- 25. पर्ल प्रक्रिया «*** glibc पता *** perl: दूषित डबल-लिंक्ड सूची: 0x0000000001474b40 ***» - मैं इसे कैसे समाप्त कर सकता हूं?
- 26. पता है कि एक एम्बेडेड सिस्टम glibc या bionic का उपयोग कर रहा है?
- 27. *** glibc का पता चला *** पर्ल: डबल मुक्त या भ्रष्टाचार (पिछला!): 0x0c2b7138 ***
- 28. एक थ्रेड सुरक्षित तरीके से glibc malloc हुक का उपयोग कर
- 29. क्यों glibc बाइनरी libc.so.6 कहा जाता है libsso.1 या libc.so.4 नहीं?
- 30. मैं structs क्यों प्रदान कर सकते हैं, लेकिन उन्हें
' आदमी 7 signal', वहाँ एक सूची होगा। – CodyChan
आपने मेरे प्रश्न को नहीं समझा है। –
फिर आपके द्वारा स्वीकार किए गए उत्तर में सामग्री 'मैन 7 सिग्नल' में क्यों है? – CodyChan