在Linux系统上触发一个用C编写的应用程序的“干净”关闭是可能的吗?我所说的“干净”是指一种用于取消初始化接口等的解决方案。类似于C++中对象的析构函数,但对于我的C应用程序来说。
我知道可以使用systemd关闭服务,但我的应用程序不是服务。我使用systemd.service来启动我的应用程序,但就我对systemd服务的理解而言,应用程序本身被认为是一个oneshot (在开始时有一个初始化,然后它进入一个while (1)循环)。
有没有可能用systemd或类似的Linux功能跳出这个循环?对这样一个问题的“标准”解决方案是什么?
int main (int argc, char
我正在编写的代码有很多调用来创建新的字符串之类的东西。但最近在将服务器升级到12.10 Ubuntu后,我开始遇到一些麻烦。一些子进程会卡在futex中。因此,我将GDB附加到在futex中运行了很长一段时间的进程,我执行了一个backtrace,并找到了以下日志
#0 0x00007f563afc69bb in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f563af4a221 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f563af47fa7 in mal
在按ctrl+c时,我得到了以下错误
^Cctrl-c
terminate called without an active exception
Aborted (core dumped)
这里是gdb stackstrace:
(gdb) bt
#0 0x0000003a47432625 in raise () from /lib64/libc.so.6
#1 0x0000003a47433e05 in abort () from /lib64/libc.so.6
#2 0x0000003a4a46007d in __gnu_cxx::__verbose_terminate_handl
在Linux上的C中,设置一个可以处理具有相同函数的多个POSIX信号的程序的最佳方式是什么?
例如,在我的代码中,我有一个处理程序函数,当捕获到信号以执行某些操作时,我通常希望调用该函数:
/* Exit handler function called by sigaction */
void exitHandler( int sig, siginfo_t *siginfo, void *ignore )
{
printf("*** Got %d signal from %d\n", siginfo->si_signo, siginfo->si_pid);