2013-06-11 4 views
1

Я не могу понять, как проверить из C/C++, если служба включена через launchd. Я знаю, что я могу использовать launchctl из командной строки, и в настоящее время я запускаю «startctl list myServiceName» из fork/exec.Как проверить, включена ли служба с запуском

Я обнаружил, что boostrap_look_up() может быть способом проверить это, но я не могу найти достаточно документации, чтобы сконденсировать это на простом примере.

Можете ли вы пролить свет на это? Все, что мне нужно, это небольшая функция, чтобы проверить, действительно ли моя служба зарегистрирована и доступна.

+0

Почему вы не используете список запуска? –

+0

Как я уже говорил в первом абзаце, я использую список launchctll изнутри fork/exec. Я хочу, чтобы избежать разблокировки любых процессов и вызова функции. – spartygw

+0

use pthread_create() –

ответ

1

Яблоко с открытым исходным кодом launchd и исходный код доступен на http://opensource.apple.com/source/launchd/launchd-442.26.2/

Исходный код launchctl находится в support/launchctl.c. Надеюсь, вы сможете найти то, что вам нужно. Я подозреваю, что вам нужно посмотреть на функцию list_cmd примерно на две трети пути вниз по файлу.

Если ответ не в launchctl.c, тогда я действительно не знаю, где еще это будет.


Первоначально я начал искать символы в launchctl двоичной системе.

Функция, указанная вами, указывается в launchd/liblaunch/libbootstrap.c.

Запуск nm /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 и посмотрев, сможете ли вы получить необходимую функциональность, связав его с вашим проектом. Я понятия не имею, будет ли это делать то, что вы хотите.

+0

Спасибо за ваш ответ. Мне потребуется некоторое время, чтобы узнать, могу ли я заставить что-то работать, но мне нравится ваш ответ, чтобы принять его. Ты дал мне лидерство, в котором у меня не было никого. – spartygw

Смежные вопросы