草庐IT

sigaction

全部标签

Android 应用程序在崩溃后自动重启

我的应用部分是使用C/C++在native应用中编写的。问题是,每当C/C++部分由于某种原因崩溃时,应用程序就会死掉,然后自动重新启动。这会导致各种乱七八糟的问题当然,它不应该在native部分崩溃,我正在努力排除它发生的所有原因。但是,如果确实发生了,我想:优雅地退出如果死机,至少不要尝试自动重启。我很好奇为什么会发生这种行为。经过一番搜索后,我尝试将以下行放在AndroidManifest.xml的主要Activity元素中:android:finishOnTaskLaunch="true"但自动恢复仍然发生。任何人都知道为什么会发生这种情况以及如何改变它?更新:我认为一个更根本

Android 应用程序在崩溃后自动重启

我的应用部分是使用C/C++在native应用中编写的。问题是,每当C/C++部分由于某种原因崩溃时,应用程序就会死掉,然后自动重新启动。这会导致各种乱七八糟的问题当然,它不应该在native部分崩溃,我正在努力排除它发生的所有原因。但是,如果确实发生了,我想:优雅地退出如果死机,至少不要尝试自动重启。我很好奇为什么会发生这种行为。经过一番搜索后,我尝试将以下行放在AndroidManifest.xml的主要Activity元素中:android:finishOnTaskLaunch="true"但自动恢复仍然发生。任何人都知道为什么会发生这种情况以及如何改变它?更新:我认为一个更根本

linux - 内存访问错误 sys_rt_sigaction(信号处理程序)

关注此InterfacingLinuxSignals文章中,我一直在尝试在amd64中使用sys_rt_sigaction,但在发送信号时总是出现内存访问错误。structsigaction在使用C/C++函数sigaction时有效。sys_rt_sigaction调用有什么问题?带有ASM代码的C/C++:#include#include#includevoidhandler(int){printf("handler\n");}voidrestorer(){asmvolatile("mov$15,%%rax\nsyscall":::"rax");}structsigactionac

c - sigaction 如何既是结构又是函数?

我注意到sigaction被定义为结构和函数(http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/signal.h.html):intsigaction(int,conststructsigaction*restrict,structsigaction*restrict);使用它的一个例子是:structsigactionsa;/*Setuphandler*/sa.sa_flags=SA_SIGINFO|SA_RESTART;sa.sa_sigaction=timer_expiry;/*Setupsignalwatchdog

c - 在 sigaction 处理程序中使用 flock()

flock()通常是异步信号安全的,因为它是一个系统调用。它的语义使得很难以不同的方式实现它。它不在POSIX的list中异步信号安全函数,因为它根本不在POSIX中。是否可以在sigaction处理程序中毫无问题地使用flock()? 最佳答案 根据@alk回答如下topic:我们可以开发我们的属性(property)flock()函数(它的名字可以是async_flock())。我们在这个新函数中复制原点lockf()的内容代码,然后我们进行以下更改以获得异步信号安全功能:替换__fcntl与fcntl:编译代码所必需的替换__

c - SA_ONSTACK在sigaction中有什么用?

当信号被传递时,信号处理程序在进程的堆栈上执行。如果在sigaction()中使用SA_ONSTACK,则使用不同的堆栈。使用不同的栈有什么用?有任何用例示例吗? 最佳答案 备用堆栈的一种用途是尝试正确处理SIGSEGV。如果您的进程刚刚收到SIGSEGV因为它超出了它的堆栈限制,您不能在进程的堆栈上运行信号处理程序-它已经满了。在这种情况下,拥有备用堆栈可以让您(小心地)运行一些或多或少的正常关闭。 关于c-SA_ONSTACK在sigaction中有什么用?,我们在StackOver

c - 使用 waitpid 或 sigaction?

我了解到:1)waitpid用于等待一个child死亡,然后收集SIGCHLD和child的退出状态等。2)当我们有SIGCHLD的信号处理程序时,我们会做一些与清理child或其他东西(由程序员决定)相关的更多事情,然后做一个waitpid,这样child就不会变成僵尸然后返回。现在,当我们执行fork/exec并且子进程返回时,我们的程序中是否需要同时包含1和2?如果两者都有,则先获取SIGCHLD,因此信号处理程序先被调用,因此它的waitpid被成功调用,而不是父进程代码中的waitpid,如下所示:my_signal_handler_for_sigchld{dosomethi

c++ - Sigaction 并将 Linux 代码移植到 Windows

我正在尝试移植caffe(为Linux开发)源代码到Windows环境。问题出在signal_handler.cpp和signal_handler.h的sigaction结构中。源代码如下所示。我的问题是可以完成哪个库或代码替换以使此sigaction在Windows中工作。///头文件#ifndefINCLUDE_CAFFE_UTIL_SIGNAL_HANDLER_H_#defineINCLUDE_CAFFE_UTIL_SIGNAL_HANDLER_H_#include"caffe/proto/caffe.pb.h"#include"caffe/solver.hpp"namespac

linux - 你能给sigaction传递一个论点吗?

我注意到在sigaction的定义中,sa_sigaction回调,最后一个参数是一个void*。structsigaction{void(*sa_handler)(int);void(*sa_sigaction)(int,siginfo_t*,void*);sigset_tsa_mask;intsa_flags;void(*sa_restorer)(void);}这有点表明您可以将用户参数传递给sa_sigaction处理程序。但是,我找不到这方面的例子。有谁知道您是否可以将参数传递给sigaction回调函数?你有一个简单的例子吗? 最佳答案