Tôi muốn sử dụng setitimer()
(hoặc ít có thể xảy ra hơn, alarm()
) trong quy trình đa luồng trong linux 2.6+ với libc đã bật NPTL. Chuỗi nào sẽ nhận được sigalarm (SIGALRM)
từ hạt nhân?setitimer, SIGALRM & quy trình đa luồng (linux, c)
Cảm ơn.
Cập nhật 2014-04: Tôi nên đặt setitimer()
trong chương trình đa luồng, nếu tôi muốn viết một tiện ích lược tả như cpuprofile của gperftools; nhưng trong công cụ của tôi, tôi muốn hỗ trợ cả hai chương trình liên kết động (vì vậy có thể đưa thư viện của riêng tôi vào init profiling) và các chương trình liên kết tĩnh (không có khả năng làm ^^^^^^).
công cụ profiling hiện tại của tôi làm việc với các thiết setitimer
ngay sau fork()
và trước exec()
, và nó cũng sử dụng ptrace
để có được quyền kiểm soát các chương trình mục tiêu và để cướp SIGPROF/SIGVPROF/SIGALRM tạo ra bởi các setitimer
. Tôi không có ý tưởng chính xác làm thế nào nó hoạt động với các chương trình đa luồng.
cũng đúng cho freebsd và solaris? – osgx