相关疑难解决方法(0)

在Linux中使用多个线程进行信号处理

在Linux中,当程序(可能有多个线程)收到SIGTERM或SIGHUP等信号时会发生什么?

哪个线程截获信号?多个线程可以获得相同的信号吗?是否有专门用于处理信号的特殊线程?如果没有,那么处理信号的线程内部会发生什么?信号处理程序例程结束后如何恢复执行?

c linux multithreading signals ipc

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

linux是否允许从信号处理程序进行任何系统调用?

我的理解是,一般来说,如果从信号处理程序调用非异步信号安全函数,行为是不确定的,但我听说linux允许你安全地调用任何系统调用.这是真的?此外,SIGSEGV处理程序的唯一可移植行为是中止或退出,但我知道如果你返回,linux实际上会恢复执行,是吗?

c linux signals

18
推荐指数
3
解决办法
8060
查看次数

是SIGSEGV交付给每个线程?

我在Linux中有一个多线程的程序.有一些记忆区域,我有兴趣看看它们是否在一定时间内写完.为此,我只给予那些内存页面的读访问权限,并为SIGSEGV安装信号处理程序.现在我的问题是,每个线程是否会为自己调用信号处理程序.假设线程1写入一些禁止的内存区域,它会执行信号处理程序吗?

c linux signals memory-management

15
推荐指数
2
解决办法
4682
查看次数

如何限制单个Linux进程的内存使用并且不终止该进程

如何限制单个Linux进程的内存使用,而不是终止该进程。

我知道ulimit可以限制内存使用,但是如果超过限制,将终止该进程。

是否有任何其他命令或外壳程序可以限制内存使用并且不会终止进程?

linux ubuntu

4
推荐指数
1
解决办法
1万
查看次数

SIGSEGV 由“kill”生成时是否特殊?

我知道SIGSEGV当内核使用它报告内存访问冲突时不能忽略这一点。但是,如果我安装一个SIGSEGV不执行任何操作的信号处理程序,然后另一个进程使用kill该信号向我发送该信号,那么其行为是否与我使用“正常”信号(如 )相同SIGUSR1?

c++ posix signals kill segmentation-fault

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

Linux 中的信号处理

我想了解信号处理的工作原理,因此我决定以另一种方式处理除以零。程序应请求输入,直到不发生被零除为止。但是,我的处理程序在第一次跳转后被忽略,并且除法由系统处理。为什么会出现这种情况?

#include <stdio.h>
#include <signal.h>
#include <setjmp.h>

jmp_buf env;

void handler(int sig) {
    printf("Invalid input , try again\n");
    longjmp(env , 1);
}

int main() {
    signal(SIGFPE , handler);
    int x , y;
    setjmp(env);
    scanf("%d%d" , &x , &y);
    printf("%d\n" , x / y);
}
Run Code Online (Sandbox Code Playgroud)

c linux signals

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