首页 > TAG信息列表 > signal-handling

如何在Linux中处理errno和信号处理程序?

当我们编写一个可能更改errno的信号处理程序时,是否应该在信号处理程序的开头保存errno并在其末尾恢复errno?就像下面这样: void signal_handler(int signo){ int temp_errno = errno; *** //code here may change the errno errno = temp_errno; } 解决方法:glibc文档

使用信号处理程序的正确方法

使用信号处理程序的正确方法是什么? 我从question处看到了下面的代码,想知道为什么还要放置信号(SIGSEGV,sig_func); sig_func里面?当进程接收到SIGSEGV信号时,这是否会产生无限循环? void sig_func(int sig) { write(1, "Caught signal 11\n", 17); signal(SIGSEGV,sig_func); }

在C中获取键盘中断

程序: #include<stdio.h> void main() { int time=1800; while(1){ system("clear"); time-=1; printf("%d\n",time); sleep(1); if(time==0) pause(); } } 当时间达到0时,上述程序停止.我的要求是在程序运行期间

c – sem_wait和信号处理程序

为什么sem_wait不能在信号处理程序中使用(特别是每个线程的SIGSEGV信号)?有人可以给我一个示例场景,它会使应用程序崩溃吗?我猜sem_wait是可重入的和线程安全的,所以这里有什么问题?为什么它不是异步安全的?解决方法:异步安全是一个比线程安全更严格的要求.您可以使用基元编写线程安全

c – 在信号处理程序中使用`std :: shared_ptr`和`std :: weak_ptr`是否安全?

我知道malloc是免费的,或者直接或间接地从信号处理程序中自由调用. 但是,如果我能保证至少有一个共享引用仍然存在,那么复制构造和销毁其他共享或弱引用是否安全,或者我是否必须自行引用引用计数? (是的,我知道信号处理人员通常不应该做太多.但这次我有充分的理由.)解决方法:C标准定

c – backtrace_symbols无法打印导致信号的函数

我正在为我的C应用程序实现一个简单的崩溃记录器: static void handler(int, siginfo_t * info, void *) { void *array[1000]; switch (info->si_signo) { case SIGILL: Logger() << "Received SIGILL"; break; case SIGSEGV: Logger

用于信号处理和用户管理的Python Unix / Windows抽象层

我想问一个问题,我的广泛的网络搜索会建议答案是“不”,但也许我忽略了一些东西…… 是否有Python抽象层位于Unix和Windows信号处理(用于生成的独立进程)和用户管理(获取用户和组条目,比较它们等)之上? 是的,我知道Windows和Unix在两个方面都有所不同,但操作系统特定的方法确实完成

我可以写保护Linux进程的地址空间中的每个页面吗?

我想知道是否有办法在Linux中写保护每个页面 进程的地址空间(来自进程本身的内部,通过的mprotect()).通过“每一页”,我的意思是每一页进程的地址空间可能由普通用户写入程序在用户模式下运行 – 所以,程序文本,常量,全局变量和堆 – 但我会很满意常量,全局和堆.我不想写保护堆栈