gpt4 book ai didi

launchd - 如何使用 launchd 启动应用程序的多个实例?

转载 作者:行者123 更新时间:2023-12-03 17:21:14 24 4
gpt4 key购买 nike

我的申请分为两部分。主要应用程序和辅助工具。辅助工具使用提升的权限执行任务。

launchd plist 如下所示:(仅包含重要设置。)

<key>UserName</key>
<string>root</string>
<key>ProgramArguments</key>
<array>
<string>/Library/PrivilegedHelperTools/helperTool</string>
</array>
<key>Sockets</key>
<dict>
<key>IPC</key>
<dict>
<key>SockPathName</key>
<string>/tmp/TheSocket</string>
</dict>
</dict>

有没有办法为每个到套接字的连接启动一个新的帮助程序实例?

或者,是否有用于处理多个请求的现有模板? (目前我自己正在这样做,这是相当多的丑陋代码。)

最佳答案

这可能是我在 Stackoverflow 中的第一个答案:)

首先,将 inetdCompatibility 和 Wait 设置为 false。
这将使 launchd 接受套接字。

<key>inetdCompatibility</key>
<dict>
<key>Instances</key>
<integer>42</integer>
<key>Wait</key>
<false/>
</dict>

一次,launchd 接受了套接字。接受的套接字将作为 STDIN_FILENO 传递到您的程序中。您的launchd进程可以按如下方式访问接受的套接字:(我从开源sshd复制了代码)
int sock_in;
int sock_out;
sock_in = sock_out = dup(STDIN_FILENO);
NSLog(@"socket descriptor: %d", sock_in);

sock_in 已经被接受。所以你的程序可以不用调用accept就可以使用它。

我假设您已经有一个 plist 可以为您监控套接字端口。如果没有,可以按如下方式进行。它将使用 IPv4 TCP 创建一个用于监听端口 18411 的启动套接字。
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>18411</string>
<key>SockType</key>
<string>stream</string>
<key>SockFamily</key>
<string>IPv4</string>
</dict>
</dict>

关于launchd - 如何使用 launchd 启动应用程序的多个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com