سؤال

وأنا أتساءل عما إذا كان هناك بعض الطريقة أستطيع التوقف عن مهمة launchd عند تطبيق مفتوح، ومن ثم تشغيله مرة أخرى عندما يتم إغلاق التطبيق. ومن المقرر مهمتي launchd أن يتم إعلامك عند تغيير ملف ومن ثم القيام ببعض كود UNIX مع الملف. ومع ذلك، طلبي يجعل الكثير من التغييرات على هذا الملف لذلك لا يمكن أن يكون مهمة تعمل عندما بلدي التطبيق مفتوح (وإلا فإنه سيتم تشغيل التعليمات البرمجية UNIX كل مرة يتم فيها تغيير الملف، وهي ليست جيدة). هل هناك إيجابيات وسلبيات لطرق مختلفة للقيام بذلك (على الرغم من أنني لم أجد أي الأساليب)؟

وشكرا على اي مساعدة.

هل كانت مفيدة؟

المحلول

هل يمكن استخدام ابليسكريبت لفحص ومعرفة ما إذا كان التطبيق قيد التشغيل.

وأعتقد أن هذا الموضوع الذي يصف ابليسكريبت التي من شأنها رصد أحد التطبيقات بدء التشغيل والاغلاق: 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 لdo shell script

نصائح أخرى

إذا كنت تشعر المغامرة، يمكنك محاولة API launchd نفسها، والتي هي في /usr/include/launch.h. تحقق من تنفيذ launchd_stop_job في launchctl .CPP .

يرجى الرجوع إلى الصفحة رجل launchd.plist لKeepAlive وPathState الكلمات الرئيسية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top