小编Zil*_*Tan的帖子

关于在多线程环境中捕获SIGSEGV

我想知道是否有可能/建议的方法来捕获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)

c linux signals

6
推荐指数
2
解决办法
6783
查看次数

通过 gnuplot 随时间堆叠直方图

我想随时间绘制堆积的直方图。结果证明这与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)

gnuplot

2
推荐指数
1
解决办法
2218
查看次数

标签 统计

c ×1

gnuplot ×1

linux ×1

signals ×1