刚刚升级到 Linux Mint 18.1 KDE(Plasma 5.8.5,Qt 5.6.1)除了我以前从未遇到过的奇怪问题外,一切都很好。某些东西在 X-window 级别上抓取了我的“Ctrl+s”序列,因为它从未达到应用程序级别。因此,例如“Ctrl+s”和“Ctrl+x Ctrl+s”标准 emacs 键都不起作用。即使在更典型的 KDE 程序中,“Ctrl+s”序列也已失效。我想这也可能是 KDE 框架,但没有定义为 Ctrl+s 的全局热键(我已将全局 Ctrl+s 移至 Ctrl+Shift+s)
这是铃声;它只是死了的“Ctrl + s”序列。所有其他的,据我所知,Ctrl 键按预期工作。
从 running 中可以获得一些关于正在发生的事情的线索xev
。键入 Ctrl+s 生成以下序列
KeyPress event, serial 40, synthetic NO, window 0x3400001,
root 0x4c4, subw 0x0, time 14783934, (-711,685), root:(1159,750),
state 0x0, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
FocusOut event, serial 40, synthetic NO, window 0x3400001,
mode NotifyGrab, detail NotifyAncestor …
Run Code Online (Sandbox Code Playgroud) 我以前使用init.d/脚本来管理我编写的守护进程,这些守护进程多年来一直完美运行。现在我发现自己需要提供一个systemd/脚本,但我无法让它与我执行守护程序设置代码的方式一起工作。
当我设置一个守护进程时,我分叉两次以释放控制终端并避免成为会话领导者。
问题是我已经确认当你这样做时systemd/会失去跟踪并杀死守护进程。我还确认跳过第二个 fork 可以使其再次与systemd/一起工作。
我的基本(为了讨论的目的稍微简化)systemd/脚本是
[Unit]
Description=GM7 Service Daemon
[Service]
Type=forking
ExecStart=/usr/bin/g7ctrl
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是:我是否需要改变过去十年在 C/C++ 中完成守护进程设置代码的方式,或者是否有选项让 systemd/ 来跟踪双分叉?
我还没有完全了解内部工作原理,如果 systemd 本身为它启动的每个守护进程生成进程,在这种情况下,我的双叉确实会过时
我承认我这样做的方式(双叉)部分是出于历史原因,但当时我对最佳实践进行了一些相当深入的阅读,这就是我后来想到的(大约十年前)