从启动守护程序生成一个屏幕会话

时间:2010-02-21 05:07:08

标签: macos gnu-screen launchd

我已经编写了一个launchd .plist,它应该在启动时将调试器附加到WindowServer。脚本的主要部分看起来像

screen -D -m -S "WindowServer Debugger" \
gdb \
-x $GDBSCRIPT \
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/CoreGraphics.framework/Versions/A/Resources/WindowServer \
$WSPID

这将启动一个分离的屏幕会话,其中gdb附加到WindowServer。

但是,这似乎在Snow Leopard下的launchd中触发了一个错误条件,导致它向日志发出错误消息:

com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Bug: launchd_core_logic.c:8250 (23932):0
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) Switching sessions is not allowed in the system Mach bootstrap.
com.apple.launchd[1] (0x10011c070.anonymous.screen[961]) _vprocmgr_switch_to_session(): kr = 0x44c

我应该注意,无论系统启动后有多长时间,都会发生“......系统Mach bootstrap中不允许”的消息。

是否有解决方法,以便我可以生成我的屏幕会话?

根据launchd的联机帮助页,

  

守护进程不应尝试显示UI或直接与用户的登录会话进行交互。

这可能表明launchd看到此行为与另一个会话交互并拒绝它。代码在这里,但我不熟悉它:http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250

2 个答案:

答案 0 :(得分:1)

显然你不能在系统引导程序中分离(使用-D)。您可以在启动中(或在用户引导程序中)执行此操作。

答案 1 :(得分:1)

我使用屏幕版本4.0.3遇到了这个问题。我在git://git.sv.gnu.org/screen.git上构建了最新版本(4.1.dev)并为我解决了这个问题。