4

WindowServer の起動時にデバッガをアタッチする launchd .plist を作成しました。スクリプトの主要部分は次のようになります

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 ブートストラップでは許可されていません」というメッセージは、システムの起動からの経過時間に関係なく発生することに注意してください。

画面セッションを生成できるようにするための回避策はありますか?

launchd のマンページによると、

デーモンは、UI を表示したり、ユーザーのログイン セッションと直接やり取りしたりしないでください。

これは、launchd がこの動作を別のセッションと対話し、それを拒否していると見なしていることを示唆している可能性があります。コードはここにありますが、私はそれに慣れていません: http://launchd.macosforge.org/trac/browser/trunk/launchd/src/launchd_core_logic.c#L8250

4

2 に答える 2

1

screen バージョン 4.0.3 を使用してこの問題が発生していました。git://git.sv.gnu.org/screen.git で入手可能な最新バージョン (4.1.dev) をビルドし、問題を解決しました。

于 2010-10-14T08:50:03.327 に答える
1

どうやら、システムのブートストラップで (-D を使用して) デタッチできないようです。これは launchagent で (またはユーザーのブートストラップ内で) 行うことができます。

于 2010-02-21T19:55:28.900 に答える