Non syscall nhưng cái gì đó như snprintf(), dprintf()Tôi cần một danh sách các chức năng async-Signal-Safe từ glibc
Trả lời
phiên bản mới nhất của Cuối cùng man 7 signal-safety
chứa danh sách quan tâm: signal-safety.7.html
Tôi khá chắc chắn rằng bạn có để xem
documentation
Chỉnh sửa: Sau đó, khoảng this list thì sao?
Từ 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.
tài liệu đó không bao gồm thông tin bắt buộc về an toàn –
danh sách đó là danh sách các syscalls. Tôi nhớ nó khá. nhưng tôi cần danh sách các chức năng từ glibc –
Có, danh sách đó bao gồm chủ yếu là các cuộc gọi hệ thống, nhưng đó là những gì GLIBC là; giao diện __system___. Tôi nhận thấy rằng các hàm C tiêu chuẩn khác là __not__ tín hiệu an toàn vì chúng không được liệt kê ở đây, hoặc ít nhất tôi không thể tìm thấy các con trỏ định nghĩa _any_ tới các tiêu chuẩn khác (POSIX) liệt kê chúng. – Kimvais
Điều này có vẻ khó khăn để xác định, như bạn không biết những gì chức năng không an toàn ngẫu nhiên một thói quen thư viện có thể quyết định gọi. Danh sách cũng có thể khác nhau giữa các phiên bản khác nhau của glibc, hoặc nếu bạn mang nó đến một hệ thống giống Unix khác. Có vẻ như bạn phải phân tích rất nhiều ngăn xếp cuộc gọi để tìm câu trả lời và thậm chí điều đó có thể hơi run rẩy từ phiên bản này đến phiên bản khác, gây phân tán.
Có lẽ bạn không tìm kiếm các phương pháp thiết kế thay thế, nhưng có vẻ như chiến lược tốt hơn là: nếu chương trình của bạn có vòng lặp sự kiện, hãy xử lý tín hiệu rất ngu ngốc và chỉ thiết lập một số trạng thái mà vòng lặp sự kiện sẽ nhận . Bằng cách đó bạn thực hiện công việc có ý nghĩa bên ngoài trình xử lý tín hiệu.
Ví dụ: Giả sử bạn có vòng lặp poll()
ở đâu đó. Có lẽ bạn có thể bao gồm một đường ống mà bộ xử lý tín hiệu có thể ghi vào. Sau đó, vòng lặp poll()
thực hiện một số công việc không tầm thường dựa trên việc được báo hiệu bởi điều đó.
Tôi cần điều này trong bộ xử lý SIGSEGV SAU KHI sự cố ứng dụng. –
Tôi muốn thư giãn ngăn xếp khi gặp sự cố –
Tôi cần điều này trong bộ xử lý SIGSEGV SAU KHI sự cố ứng dụng.
Tôi muốn thư giãn chồng về vụ tai nạn
Nếu bạn đang cố gắng để nắm bắt một stack trace:
thường
abort
sẽ gây ra một bãi chứa lõi, có thể được chạy qua một trình gỡ lỗi để tạo ra dấu vết ngăn xếp.Cách khác, cách làm thô (nhưng an toàn) là
fork
vàexec
một tiện ích riêng biệt (ví dụ: "pstack") để xuất một dấu vết ngăn xếp của tác vụ bị lỗi. Khiexec
-ing (saufork
-ing, ở trẻ em), bạn cần phải chuyển ID tiến trình của mình bằng cách sử dụnggetppid
; và trong phụ huynh, bạn cần phảiwait
để hoàn thành, trước khi gọi sốabort
.
Mặt khác, nếu bạn đang cố gắng để làm một lối ra "sạch" sau SIGSEGV (ví dụ Việc đảm bảo C++ hàm hủy được gọi, vv) - thì bạn nên được cảnh báo rằng POSIX nói:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_02:
hành vi của một quá trình là undefined sau khi nó bỏ qua một SIGFPE, SIGILL, SIGSEGV, hoặc tín hiệu SIGBUS mà không được tạo ra bởi kill(), sigqueue(), hoặc huy động().
và http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03_03:
Hành vi của một quá trình là undefined sau nó sẽ trả về bình thường từ một hàm tín hiệu bắt cho một SIGBUS, SIGFPE, SIGILL, hoặc SIGSEGV tín hiệu mà không được tạo ra bởi kill(), sigqueue() hoặc tăng().
- 1. Interleaving danh sách các chức năng
- 2. chức năng lisp để nối một danh sách các chuỗi
- 3. Tạo một danh sách các chức năng trong python
- 4. Tạo danh sách các chức năng từ một vectơ ký tự
- 5. Đi qua một danh sách các chuỗi để từ python/ctypes chức năng C mong char **
- 6. Danh sách nhóm cho chức năng hclust
- 7. Cần gọi chức năng gốc từ chức năng bị ngắt
- 8. Gọi từng chức năng trong danh sách
- 9. Danh sách Erlang: chức năng index_of?
- 10. phát lại danh sách các chức năng và thông số
- 11. chức năng glibc để lấy tên thực thi hiện tại?
- 12. Tôi cần chức năng C# chậm
- 13. "này" bên trong một chức năng ẩn danh? Cuốn sách
- 14. danh sách các chức năng tắt máy đã đăng ký
- 15. Chi phí của các chức năng danh sách bằng Python
- 16. là có một cách lười biếng để viết các chức năng trừ (loại bỏ các mục từ một danh sách)?
- 17. Chức năng nào trong glibc gọi hàm chính là
- 18. Tạo một HashMap trong Scala từ một danh sách các đối tượng mà không cần lặp
- 19. Làm thế nào để chức năng merge chồng chéo số-dao động từ một danh sách
- 20. Danh sách tất cả các cuộc gọi chức năng được thực hiện trong một ứng dụng
- 21. Nhận danh sách tất cả các tham số chức năng từ bên trong hàm
- 22. C++: Các chức năng ảo cần gọi cùng một mã?
- 23. Làm cách nào để áp dụng chức năng ẩn danh từ danh sách trong sơ đồ?
- 24. Nối danh sách các từ điển Python vào một tập tin mà không cần tải nó
- 25. Chức năng giống như Slice từ một Danh sách trong F #
- 26. Nhân sư: danh sách các chức năng trong một mô-đun
- 27. Sắp xếp một danh sách từ một danh sách ID
- 28. Danh sách :: MoreUtils lưới hoặc 'zip' chức năng
- 29. Trả về các chức năng ẩn danh từ một cách lapply - điều gì đang xảy ra?
- 30. Có một tính năng danh sách/chức năng trong Resharper không?
'người đàn ông 7 signal' và tìm kiếm' async-tín hiệu-safe', sẽ có một danh sách. – CodyChan
Bạn chưa hiểu câu hỏi của tôi. –
Tại sao nội dung trong câu trả lời bạn chấp nhận nằm trong 'tín hiệu người đàn ông 7 '? – CodyChan