如果通过launchd启用了服务,我不知道如何从C/C++中检查。我知道我可以从命令行使用 launchctl,并且目前正在从 fork/exec 执行“launchctl list myServiceName”。
我发现 boostrap_look_up() 可能是检查这一点的方法,但我找不到足够的文档将其浓缩为一个简单的示例。
你能解释一下吗?我所需要的只是一个小函数来测试我的服务是否实际注册并可用。
Apple 已开源launchd
,源代码可在http://opensource.apple.com/source/launchd/launchd-442.26.2/获得
的源代码launchctl
在support/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
并查看是否可以通过将其链接到项目来获得所需的功能。我不知道这是否会做你想要的。