我编写了C ++应用程序,导致所有 KDE 会话在程序退出时注销。这显然是不可能的行为,因为我的应用程序是围绕网络运行的。我没有使用任何 Qt / KDE 库,这就是我感到惊讶的原因。应用程序会导致所有会话在return 0;
上注销,甚至在 gdb 下运行。我在执行rip
之前检查了return 0;
注册。它指向main()
的中间,我有4行代码。
我的问题是:
return 0;
上的会话注销。$ strace app > strace1
。文件已创建,但没有内容(可能是由会话注销引起的)。整个代码太复杂,无法在此处显示。我正在努力:
3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linux
EDIT1:当从tty运行应用程序时,它会注销当前用户并执行DoS,只有机器重启才能提供帮助。我将在虚拟机上运行它,也许会有其他行为。
答案 0 :(得分:1)
此行为是由编码错误的应用程序逻辑引起的。当我做return 0;
时,调用了几个类的析构函数,其中一个是杀死子进程。
// Proof of concept:
#include <unistd.h>
#include <signal.h>
int main()
{ kill(-1, SIGKILL); }
只需阅读 man ,-1参数将杀死所有进程,除了1.这是隐秘的大声笑。
答案 1 :(得分:0)
如何保存strace的输出?我试过
$ strace app > strace1
。
$ strace app >& strace1
也可以重定向STDERR。