Aracılığıyla paylaş


İç İçe İşler

Bir uygulama, işlemlerin alt kümelerini yönetmek için iç içe işleri kullanabilir. İç içe işler, işleri de kullanan diğer uygulamaları barındırmak için işleri kullanan bir uygulamayı da etkinleştirir.

Windows 7, Windows Server 2008 R2, SP3 ile Windows XP, Windows Server 2008, Windows Vista ve Windows Server 2003: A işlemi yalnızca tek bir işle ilişkilendirilebilir. İç içe işler Windows 8 ve Windows Server 2012'de kullanıma sunulmuştur.

Bu konu, iç içe yerleştirilmiş işlerin iş iç içe yerleştirmesine ve davranışına genel bir bakış sağlar:

İşler ve iş nesneleri hakkında genel bilgi için bkz. İş Nesneleri.

İç İçe İş Hiyerarşileri

İç içe yerleştirilmiş işler, her alt işin kendi üst işi içindeki işlemlerin bir alt kümesini içerdiği bir üst-alt ilişkiye sahiptir. Zaten bir işte olan bir işlem başka bir işe eklenirse, sistem geçerli bir iş hiyerarşisi oluşturabiliyorsa ve her iki iş de UI sınırlarını ayarlıyorsa işler varsayılan olarak iç içe geçer (JobObjectBasicUIRestrictions) ile SetInformationJobObject).

Şekil 1'de P0 ile P7 arasında etiketlenmiş bir işlem ağacı içeren bir iş hiyerarşisi gösterilmektedir. İş 1, İş 2 ve İş 4'ün üst iştir ve İş 3'ün bir üst. İş 2, İş 3'ün anlık üst; İş 3, İş 2'nin anlık alt. İşler 1, 2 ve 3, İşler 1 ve 2'nin İş 3'ün üst iş zinciri olduğu bir iş zinciri oluşturur. İş zincirindeki bitiş işi, bu işteki işlemlerin anında iş. Şekil 1'de İş 3, P2, P3 ve P4 işlemlerinin hemen işidir.

şekil 1. İşlem ağacı içeren iç içe iş hiyerarşisi

İç içe işler, eş işlem gruplarını yönetmek için de kullanılabilir. Şekil 2'de gösterilen iş hiyerarşisinde, İş 1, İş 2'nin üst işidir. İş hiyerarşisinin işlem ağacının yalnızca bir bölümünü içerebileceğini unutmayın. Şekil 2'de, P0 hiyerarşide değildir, ancak alt işlemleri P1 ile P5 arasındadır.

şekil 2. eş işlemleri içeren iç içe iş hiyerarşisi

İç İçe İş Hiyerarşisi Oluşturma

İş hiyerarşisindeki işlemler, AssignProcessToJobObject işlevi kullanılarak açıkça bir iş nesnesiyle ilişkilendirilir veya tek başına işler için olduğu gibi işlem oluşturma sırasında örtük olarak ilişkilendirilir. İşlerin oluşturulma ve işlemlerin atanma sırası, hiyerarşi oluşturulup oluşturulamayacağını belirler.

Açık ilişkilendirme kullanarak bir iş hiyerarşisi oluşturmak için, tüm iş nesnelerinin CreateJobObjectkullanılarak oluşturulması ve ardından AssignProcessToJobObject, her işlemin işlemi ait olması gereken her işle ilişkilendirmesi için birden çok kez çağrılmalıdır. İş hiyerarşisinin geçerli olduğundan emin olmak için, önce tüm işlemleri hiyerarşinin kökündeki işe atayın, ardından işlemlerin bir alt kümesini anlık alt iş nesnesine atayın, vb. İşlemler işlere bu sırada atanırsa, hiyerarşi oluşturulurken alt iş her zaman üst işinde bir işlem alt kümesine sahip olur ve bu da iç içe yerleştirme için gereklidir. İşlemler işlere rastgele sırada atanırsa, bir alt işin bir noktada üst işinde olmayan işlemleri olur. İç içe yerleştirme tarafından buna izin verilmez ve AssignProcessToJobObject başarısız olmasına neden olur.

İşlemler, işlem oluşturma sırasında bir işle örtük olarak ilişkilendirildiğinde, bir alt işlem üst işleminin iş zincirindeki her işle ilişkilendirilir. Anlık iş nesnesi ayrışmaya izin veriyorsa, alt işlem anlık iş nesnesinden ve üst iş zincirindeki her işten ayrılır ve ayrışmaya izin vermeyen bir işe ulaşana kadar hiyerarşiyi yukarı taşır. Anlık iş nesnesi ayrılmaya izin vermiyorsa, üst iş zincirindeki işler izin verse bile alt işlem ayrılmaz.

İç İçe İşler için İş Sınırları ve Bildirimler

Belirli kaynak sınırları için üst iş zincirindeki işler için ayarlanan sınır, alt iş için uygulanan geçerli sınır belirler. Alt iş için geçerli sınır, üst öğesinin sınırından daha kısıtlayıcı olabilir, ancak daha az kısıtlayıcı olamaz. Örneğin, bir alt işin öncelik sınıfı ABOVE_NORMAL_PRIORITY_CLASS ve üst işinin öncelik sınıfı NORMAL_PRIORITY_CLASS ise, alt işteki işlemler için geçerli sınır NORMAL_PRIORITY_CLASS. Ancak, alt işin öncelik sınıfı BELOW_NORMAL_PRIORITY_CLASS ise, alt işteki işlemler için geçerli sınır BELOW_NORMAL_PRIORITY_CLASS. Geçerlilik sınırları öncelik sınıfı, benzinim, işleme ücreti, işlem başına yürütme süresi sınırı, zamanlama sınıfı sınırı ve çalışma kümesi minimum ve maksimum için uygulanır. Belirli kaynak sınırları hakkında daha fazla bilgi için bkz. SetInformationJobObject.

Yeni işlem oluşturma veya kaynak sınırı ihlali gibi bazı olaylar gerçekleştiğinde, bir işle ilişkili G/Ç tamamlama bağlantı noktasına bir ileti gönderilir. Bir iş, belirli sınırlar aşıldığında bildirim almak için de kaydolabilir. İç içe olmayan bir iş için, ileti işle ilişkili G/Ç tamamlama bağlantı noktasına gönderilir. İç içe yerleştirilmiş bir iş için, ileti, iletiyi tetikleyen işin üst iş zincirindeki herhangi bir işle ilişkili her G/Ç tamamlama bağlantı noktasına gönderilir. Bir alt işin, tetiklediği iletilerin iş zincirinde daha yüksek olan üst işlerin G/Ç tamamlama bağlantı noktalarına gönderilmesi için ilişkili G/Ç tamamlama bağlantı noktasına sahip olması gerekmez. Belirli iletiler hakkında daha fazla bilgi için bkz. JOBOBJECT_ASSOCIATE_COMPLETION_PORT.

İç İçe İşler için Kaynak Hesaplama

İç içe yerleştirilmiş bir işin kaynak muhasebe bilgileri, alt işlerdeki işlemler de dahil olmak üzere bu işle ilişkili her işlemin kullanımını açıklar. Bu nedenle bir iş zincirindeki her iş, kendi işlemleri tarafından kullanılan toplu kaynakları ve iş zincirindeki altındaki her alt işin süreçlerini temsil eder.

İç İçe İşleri Sonlandırma

bir iş hiyerarşisindeki bir iş sonlandırıldığında, sistem hiyerarşinin en altındaki alt iş ile başlayarak bu işteki işlemleri ve tüm alt işlerini sonlandırır. Sonlandırılan her işlem tarafından kullanılan kalan kaynaklar üst işe ücretlendirilir.

İş tanıtıcısının, tek başına işlerde olduğu gibi JOB_OBJECT_TERMINATE erişim hakkı olmalıdır.