- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 sigtimedwait () 发生崩溃,一旦在运行无限时间的线程函数中运行下面所述的代码块。在运行于 debian 9.3 上的应用程序中使用 sigtimedwait 来查找 SIGUSR1 信号,这就是我的方式正在使用它。
my_fun()
{
sigset_t set;
struct timespec tm;
siginfo_t info;
sigemptyset(&set);
sigaddset(&set, SIGUSR1);
int s = pthread_sigmask(SIG_BLOCK, &set, NULL);
if (0 != s)
{
raise(SIGABRT);
}
tm.tv_sec = 1;
tm.tv_nsec = 0;
for (;;){
if (SIGUSR1 == sigtimedwait(&set, &info, &tm)) --> Line 1077
{
}
} //end of for(infinite loop)
}
<My_filename.cpp>
我的应用程序在第 1077 行崩溃,回溯如下所示:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/local/bin/nelrtuapp_lan'.
Program terminated with signal SIGABRT, Aborted.
#0 0x00007fe781b32d9c in __GI___sigtimedwait (set=<optimized out>,
info=0x7ffe52a6c240, timeout=0x7ffe52a6c2c0) at ../sysdeps/unix/sysv/linux
/sigtimedwait.c:54
54 ../sysdeps/unix/sysv/linux/sigtimedwait.c: No such file or directory.
[Current thread is 1 (Thread 0x7fe782d74740 (LWP 7096))]
(gdb) bt
#0 0x00007fe781b32d9c in __GI___sigtimedwait (set=<optimized out>,
info=0x7ffe52a6c240, timeout=0x7ffe52a6c2c0) at ../sysdeps/unix/sysv/linux
/sigtimedwait.c:54
#1 0x0000555d6d53d659 in my_fun() at My_filename.cpp:1077
我正在尝试搜索源代码以了解更多关于 sigtimedwait.c 的 __GI___sigtimedwait 函数的信息,但没有找到具有相同函数并期望 SIGABRT 提升的文件。我经常进入 GITHUB 上的以下文件,code.woboq。
https://searchcode.com/codesearch/view/10496366/
任何关于此的指示或线索将不胜感激。
最佳答案
建议初始化struct timespec tm;
,重新编译运行。
关于linux - 从 sigtimedwait 函数接收 SIGABRT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54287312/
我应该实现一个信号处理程序,它在第一次调用某个信号时停止程序中的所有线程,如果它们已经停止则恢复它们。我使用以下代码实现了在后台运行的恶魔线程: void *handle_sig(void *arg)
我尝试根据下面的代码使用 sigtimedwait,我收到此消息“捕获意外信号 4714397,错误 0,代码 370078816”。有谁知道我在哪里可以找到这些号码对应的 map ? sig
我的程序有一个受 epoll 约束的事件循环(用于 I/O)和条件变量(用于其他消息事件),以及负责捕获信号的工作线程(SIGINT、SIGTERM、SIGHUP)。 SIGINT , SIGTERM
我正在尝试学习如何使用 sigtimedwait(),但我发现它并没有等待超时完成。下面它似乎比它应该更快地返回 EAGAIN 4 秒(每 1 分钟超时快 1 秒): #include #inclu
我最近一直在研究 Linux 上的信号处理,并阅读了所有与信号处理相关的概念。一个困扰我的问题是,为什么在进程畅通无阻时,sigtimedwait() 集合中的信号没有被传递。我的代码如下:- #in
我在 sigtimedwait () 发生崩溃,一旦在运行无限时间的线程函数中运行下面所述的代码块。在运行于 debian 9.3 上的应用程序中使用 sigtimedwait 来查找 SIGUSR1
我在 FreeBSD 上使用 sigtimedwait() 捕获 SIGCHLD 信号时遇到问题。以下源代码在 Debian GNU/Linux 7 上运行良好,但为我提供了在 FreeBSD 9.1
我是一名优秀的程序员,十分优秀!