2009-06-16 6 views
2

Мне интересно, есть ли способ остановить задачу запуска при открытии приложения, а затем запустить его снова, когда приложение будет закрыто. Моя задача запуска задана для уведомления, когда файл изменяется, а затем выполняет некоторый код UNIX с файлом. Однако мое приложение делает много изменений в этом файле, поэтому я не могу запустить эту задачу, когда мое приложение открыто (иначе он будет запускать код UNIX каждый раз, когда файл будет изменен, что плохо). Существуют ли плюсы и минусы для разных методов для этого (хотя я не нашел никаких методов)?Остановить запуск задачи Когда приложение открыто

Спасибо за любую помощь.

ответ

1

Вы можете использовать applescript, чтобы проверить и проверить, работает ли приложение.

Я нашел этот пост, который описывает AppleScript, который будет отслеживать запуск приложения и, завершение работы: http://macosx.com/forums/1199085-post2.html

global wasLoaded 

on run 
    set wasLoaded to isAppLoaded("Safari") 

    idle 
end run 

on idle 
    set x to isAppLoaded("Safari") 
    if x and not wasLoaded then 
     do shell script "SOME BASH COMMAND" -- stop your launchd task 
     set wasLoaded to true 
    else if wasLoaded and not x then 
     do shell script "SOME BASH COMMAND" -- start your launchd task 
     set wasLoaded to false 
    end if 
    return 1 --will wait 1 second before checking again 
end idle 

on isAppLoaded(app_name) 
    tell application "System Events" 
     set app_list to every application process whose name contains app_name 
     if the (count of app_list) > 0 then 
      return true 
     else 
      return false 
     end if 
    end tell 
end isAppLoaded 

я уверен, совершившийся bash скриптер мог бы рассказать вам, как сделать то же самое, анализируя выход от top.

Apple documentation for do shell script

+0

Hi Brian: Спасибо за этот код. :) Я очень ценю это. Несколько вопросов, поскольку я не так хорош в AppleScript ... Прежде всего, это выходит из моего процесса запуска или просто выглядит, работает ли мое приложение? Кроме того, как мне интегрировать это в мой файл запуска, чтобы он сначала не запускал мой код UNIX? Спасибо за помощь! – PF1

+0

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

+0

Эй, Брайан: Спасибо за вашу помощь. Я, наконец, понял способ, чтобы он работал без необходимости преобразовывать результаты в UNIX и т. Д. Разбирайте UNIX в Applescript. :) Я должен поблагодарить вас за эту идею. – PF1

2

Если вы чувствуете приключений, вы можете попробовать собственные API запуск программ, которая находится в /usr/include/launch.h. Ознакомьтесь с реализацией launchd_stop_job в launchctl.cpp.

0

Обратитесь к странице руководства launchd.plist для ключевых слов KeepAlive и PathState.