1

如果通过launchd启用了服务,我不知道如何从C/C++中检查。我知道我可以从命令行使用 launchctl,并且目前正在从 fork/exec 执行“launchctl list myServiceName”。

我发现 boostrap_look_up() 可能是检查这一点的方法,但我找不到足够的文档将其浓缩为一个简单的示例。

你能解释一下吗?我所需要的只是一个小函数来测试我的服务是否实际注册并可用。

4

1 回答 1

1

Apple 已开源launchd,源代码可在http://opensource.apple.com/source/launchd/launchd-442.26.2/获得

的源代码launchctlsupport/launchctl.c中。希望你应该能够在那里找到你需要的东西。list_cmd我怀疑您需要在文件的三分之二处查看该函数。

如果答案不在,launchctl.c那么我真的不知道它会在哪里。


launchctl最初我开始在二进制文件中寻找符号。

您提到的bootstrap_look_up()功能似乎在launchd/liblaunch/libbootstrap.c.

Runningnm /bin/launchctl提供了许多有趣的符号:

             ...
             U _bootstrap_get_root
             U _bootstrap_info
             U _bootstrap_look_up_per_user
             U _bootstrap_lookup_children
             U _bootstrap_parent
             U _bootstrap_port
             ...
             U _launch_data_alloc
             U _launch_data_array_get_count
             U _launch_data_array_get_index
             U _launch_data_array_set_index
             U _launch_data_copy
             U _launch_data_dict_insert
             U _launch_data_dict_iterate
             U _launch_data_dict_lookup
             U _launch_data_dict_remove
             U _launch_data_free
             U _launch_data_get_bool
             U _launch_data_get_errno
             U _launch_data_get_fd
             U _launch_data_get_integer
             U _launch_data_get_machport
             U _launch_data_get_opaque
             U _launch_data_get_opaque_size
             U _launch_data_get_real
             U _launch_data_get_string
             U _launch_data_get_type
             U _launch_data_new_bool
             U _launch_data_new_fd
             U _launch_data_new_opaque
             U _launch_data_new_string
             U _launch_data_set_bool
             U _launch_data_set_integer
             U _launch_data_set_opaque
             U _launch_data_set_real
             U _launch_data_set_string
             U _launch_msg
             ...

这些launch_data_函数似乎在launchd/launch/liblaunch.c.

据我所知liblaunch,它没有作为系统库安装,并且libSystem似乎也不包含这些符号(只是bootstrap_init被导出)。

我建议下载launchd源代码,自己编译liblaunch并查看是否可以通过将其链接到项目来获得所需的功能。我不知道这是否会做你想要的。

于 2013-06-25T04:14:26.713 回答