我想知道是否有可能/建议的方法来捕获SIGSEGV多线程环境中的信号.我特别感兴趣的是SIGSEGV通过类似的东西来处理*((int *)0) = 0.
关于这个主题的一些阅读导致我signal()和sigaction(),它安装了一个信号处理程序.虽然在多线程环境中似乎都没有前途.然后我尝试了sigwaitinfo(),在一个线程中接收信号,事先pthread_sigmask()调用阻止其他线程上的信号.它SIGSEGV使用raise(),在线程内或者通过类似的方式发送到进程时,信号被引发的程度起作用kill -SIGSEGV; 然而,\*((int*)0) = 0仍然杀死了这个过程.我的测试程序如下
void block_signal()
{
sigset_t set;
sigemptyset(&set);
sigaddset(&set, SIGSEGV);
sigprocmask(SIG_BLOCK, &set, NULL);
if (pthread_sigmask(SIG_BLOCK, &set, NULL)) {
fprintf(stderr, "pthread_sigmask failed\n");
exit(EXIT_FAILURE);
}
}
void *buggy_thread(void *param)
{
char *ptr = NULL;
block_signal();
printf("Thread %lu created\n", pthread_self());
// Sleep for some random time
{ ... }
printf("About to raise from %lu\n", pthread_self());
// …Run Code Online (Sandbox Code Playgroud) 我想随时间绘制堆积的直方图。结果证明这与Using gnuplot for Stacked histograms 不同。
这是数据:
05/11/2014 10:00:00 1 5 1
05/12/2014 22:00:00 3 5 1
05/13/2014 13:00:00 4 4 1
05/14/2014 09:00:00 3 4 1
05/15/2014 04:00:00 1 2 1
Run Code Online (Sandbox Code Playgroud)
前两列以空格分隔,其余列以制表符分隔。x 轴应该是日期和时间。
以下 gnuplot 脚本有问题:
set title "Test"
set key invert reverse Left outside
set key autotitle columnheader
set style data histogram
set style histogram rowstacked
set style fill solid border -1
set boxwidth 0.75
set datafile separator '\t'
set xdata time
set timefmt '%M/%D/%Y %H:%M:%S' …Run Code Online (Sandbox Code Playgroud)