代码之家  ›  专栏  ›  技术社区  ›  Georg Schölly Crazy Developer

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

  •  5
  • Georg Schölly Crazy Developer  · 技术社区  · 16 年前

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

    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>
    

    是否有方法为每个套接字连接启动一个新的helper实例?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Negative Zero    10 年前

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

    这将使Launch接受套接字。

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

    int sock_in;
    int sock_out;           
    sock_in = sock_out = dup(STDIN_FILENO);
    NSLog(@"socket descriptor: %d", sock_in);
    

    我假设您已经有了一个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>