Non syscall, ale coś podobnego snprintf(), dprintf()muszę listę asynchroniczny sygnał bezpieczny funkcji z glibc
Odpowiedz
Wreszcie najnowsze wersje man 7 signal-safety
zawierać zainteresowanych listę: signal-safety.7.html
Jestem całkiem pewien, trzeba zobaczyć
documentation
Edycja: A co powiesz na this list?
Od 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.
że dokumenty nie zawierają wymaganych informacji o bezpieczeństwie –
, że lista jest listą syscalls. Pamiętam to całkiem. ale potrzebuję listy funkcji od glibc –
Tak, ta lista składa się głównie z wywołań systemowych, ale _ to właśnie jest GLIBC; a __system__ interface_. Rozumiem, że inne standardowe funkcje C są _nieodpowiedzialne za sygnał, ponieważ nie są tutaj wymienione, lub przynajmniej nie mogę znaleźć _nych_ miarodajnych wskaźników do innych standardów (POSIX) wymieniających je. – Kimvais
To wydaje się trudne do określenia, ponieważ nie wiem, co funkcja losowa niebezpieczne rutynowe biblioteki może zdecydować się połączyć. Lista może również różnić się w zależności od wersji glibc lub jeśli zostanie przeniesiona do innego systemu podobnego do systemu Unix. Wygląda na to, że musisz przeanalizować wiele stosów wywołań, aby znaleźć odpowiedź, a nawet to może być trochę chwiejne od wersji do wersji, distro do distro.
Może nie szukasz alternatywnych podejść do projektowania, ale wygląda na to, że lepszą strategią byłoby: jeśli Twój program ma pętlę zdarzeń, uczyń obsługę sygnału bardzo głupim i po prostu ustaw stan, że pętla zdarzeń podniesie . W ten sposób wykonujesz znaczącą pracę poza obsługą sygnału.
Przykład: Załóżmy, że masz gdzieś pętlę poll()
. Być może mógłbyś dołączyć rurkę, do której może prowadzić program obsługi sygnału. Pętla poll()
wykonuje pewne nietrywialne działanie w oparciu o zasygnalizowanie tego.
Potrzebuję tego w procedurze obsługi SIGSEGV po awarii aplikacji. –
Chcę odłożyć stos po awarii –
Potrzebuję tego w module obsługi SIGSEGV PO awarii aplikacji.
Chcę rozwijać stos o katastrofie
Jeśli próbujesz uchwycić ślad stosu:
Zazwyczaj
abort
spowodowałoby zrzut rdzenia, który może zostać uruchomiony przez debugger do wygenerować ślad stosu.Alternatywnie, surowy (ale sygnał-safe) sposób robić to byłoby
fork
iexec
oddzielne narzędzie (na przykład „pstack”) w celu wyjścia ślad stosu swojego rozbitego zadania. Kiedyexec
-ing (pofork
-ing, w potomstwie), musisz przekazać swój identyfikator procesu za pomocągetppid
; i w rodzicu musiszwait
, aby go zakończyć, zanim zadzwonisz pod numerabort
.
Z drugiej strony, jeśli starasz się zrobić „czysty” zjazd po SIGSEGV (np zagwarantowanie C++ destruktory się nazywa, itp) - wtedy należy ostrzec, że POSIX mówi:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_02:
zachowanie procesu jest niezdefiniowana po zignorowaniu SIGFPE, SIGILL SIGSEGV lub sygnał SIGBUS które nie zostały wygenerowane przez kill(), sigqueue() lub podnieść().
i http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_03:
Zachowanie procesu jest zdefiniowana po zwraca zwykle od funkcję sygnału uwagę na SIGBUS, SIGFPE, SIGILL lub SIGSEGV nie został wygenerowany przez kill(), sigqueue() lub raise().
- 1. ustalić, czy funkcja jest asynchroniczny sygnał bezpieczny (można nazwać wewnątrz obsługi sygnału)
- 2. std :: asynchroniczny z przeciążenia funkcji
- 3. Muszę wywołać oryginalną funkcję z funkcji objazdu
- 4. sygnał Uchwyt z sigaction
- 5. Sygnał/Slot vs. bezpośrednie wywołania funkcji
- 6. Eksploatacja stosu z Glibc 2.12.1
- 7. Asynchroniczny NSURLConnection z NSOperation
- 8. SqlDependency z EntityFramework 6 (asynchroniczny)
- 9. Łączenie skompilowanej biblioteki z nowszą wersją glibc
- 10. Kompilowanie własnego glibc
- 11. Czy istnieje funkcja skrótu glibc?
- 12. Bezpieczny interfejs WWW z JWT
- 13. Utwórz listę funkcji z wektora znaków
- 14. glibc, glib i gnulib
- 15. użyć innej wersji glibc
- 16. Łącze z innym niż domyślnym glibc
- 17. pyton asyncio add_done_callback z asynchroniczny def
- 18. Asynchroniczny klient HTTP z Netty
- 19. asynchroniczny odczytać z Poco HTTPClientSession
- 20. Użyj asynchroniczny czekają z Array.map
- 21. łańcuchowe funkcje asynchroniczny
- 22. Asynchroniczny ADO.NET
- 23. Procesor asynchroniczny Django
- 24. Wyślij sygnał do procesu
- 25. Zmieniony sygnał wartości QSlider
- 26. wykonawcze HttpWebRequest asynchroniczny wzywa
- 27. definiowania listę funkcji w Pythonie
- 28. odtworzyć listę funkcji i parametrów
- 29. node.js asynchroniczny synchronizować
- 30. Meteor: subskrypcja aktualizacji asynchroniczny
'man 7 signal' i szukać' Async-sygnału safe', nie byłoby listy. – CodyChan
Nie zrozumiałeś mojego pytania. –
Dlaczego treść zaakceptowanej odpowiedzi znajduje się w "man 7 signal", a następnie? – CodyChan