Aracılığıyla paylaş


İş Nesneleri

iş nesnesi işlem gruplarının birim olarak yönetilmesine olanak tanır. İş nesneleri, bunlarla ilişkili işlemlerin özniteliklerini denetleen namable, securable, sharable nesneleridir. bir iş nesnesi üzerinde gerçekleştirilen işlemler, iş nesnesiyle ilişkili tüm işlemleri etkiler. Çalışma kümesi boyutu ve işlem önceliği gibi sınırları zorunlu tutma veya bir işle ilişkili tüm işlemleri sonlandırma gibi örnekler verilebilir.

İş Oluşturma

İş nesnesi oluşturmak için CreateJobObjectişlevinikullanın. İş oluşturulduğunda, işle hiçbir işlem ilişkilendirilmemiş olur.

Bir işlemi bir işle ilişkilendirmek için AssignProcessToJobObject işlevini kullanın. Bir işlem bir işle ilişkilendirildikten sonra ilişkilendirme kesilemez. bir işlem, iç içe iş hiyerarşisindeki birden fazla işle ilişkilendirilebilir. Daha fazla bilgi için bkz. İç İçe İşler.

Windows 7, Windows Server 2008 R2, SP3 ile Windows XP, Windows Server 2008, Windows Vista ve Windows Server 2003: A işlemi yalnızca bir işle ilişkilendirilebilir. İşler iç içe yerleştirilemez. İşleri iç içe yerleştirme özelliği Windows 8 ve Windows Server 2012'ye eklendi.

CreateJobObject işlevini çağırdığınızda iş nesnesi için bir güvenlik tanımlayıcısı belirtebilirsiniz. Daha fazla bilgi için bkz. İş Nesnesi Güvenliği ve Erişim Hakları.

İşlerde İşlemleri Yönetme

Bir işlem bir işle ilişkilendirildikten sonra, CreateProcess kullanılarak oluşturduğu alt işlemler de işle ilişkilendirilir. (Win32_Process.Create kullanılarak oluşturulan alt işlemler işle ilişkilendirilmemiştir.) Bu varsayılan davranış, iş için genişletilmiş sınır JOB_OBJECT_LIMIT_BREAKAWAY_OK veya JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK ayarlanarak değiştirilebilir.

  • İşin genişletilmiş sınırı JOB_OBJECT_LIMIT_BREAKAWAY_OK varsa ve üst işlem CREATE_BREAKAWAY_FROM_JOB bayrağıyla oluşturulduysa, üst işlemin alt işlemleri işle ilişkilendirılmaz.
  • İşin JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK genişletilmiş sınırı varsa, işle ilişkili herhangi bir üst işlemin alt işlemleri işle ilişkilendirılmaz. Üst işlemlerin CREATE_BREAKAWAY_FROM_JOB bayrağıyla oluşturulması gerekmez.

İş iç içe yerleştirilmişse, hiyerarşideki üst işlerin ayrık ayarları alt işlemlerin hiyerarşideki başka bir işle ilişkilendirilip ilişkilendirılmediğini etkiler. Daha fazla bilgi için bkz. İç İçe İşler.

bir işlemin bir işte çalışıp çalışmadığını belirlemek için IsProcessInJob işlevini kullanın.

Şu anda bir iş nesnesiyle ilişkili tüm işlemleri sonlandırmak için TerminateJobObject işlevini kullanın.

İş Sınırları ve Bildirimler

İş, işle ilişkili her işlemde çalışma kümesi boyutu, işlem önceliği ve iş sonu zaman sınırı gibi sınırları zorunlu kılabilir. bir işle ilişkili bir işlem, iş tarafından belirlenen sınırdan çalışma kümesi boyutunu veya işlem önceliğini artırmaya çalışırsa, işlev çağrıları başarılı olur ancak sessizce yoksayılır. Bir iş, aşıldığında bildirim tetikleyen ancak işin çalışmaya devam etmesi için izin veren sınırlar da ayarlayabilir.

Bir işin sınırlarını ayarlamak için SetInformationJobObjectişlevinikullanın. bir iş için ayarlanabilecek olası sınırların listesi için aşağıdaki konulara bakın:

Güvenlik sınırları, bir iş nesnesiyle ilişkili her işlem için ayrı ayrı ayarlanmalıdır. Daha fazla bilgi için bkz. İşlem Güvenliği ve Erişim Hakları.

SP3 ve Windows Server 2003 ile Windows XP :SetInformationJobObject işlevi, bir iş nesnesiyle ilişkili tüm işlemler için güvenlik sınırlamaları ayarlamak için kullanılabilir. Windows Vista'dan başlayarak, bir iş nesnesiyle ilişkili her işlem için güvenlik sınırları ayrı ayrı ayarlanmalıdır.

İş iç içe yerleştirilmişse, hiyerarşideki üst işler iş için uygulanan sınırı etkiler. Daha fazla bilgi için bkz. İç İçe İşler.

İşin ilişkili G/Ç tamamlama bağlantı noktası varsa, belirli iş sınırları aşıldığında bildirim alabilir. Bir sınır aşıldığında veya başka bazı olaylar oluştuğunda sistem tamamlanma bağlantı noktasına ileti gönderir. Tamamlanma bağlantı noktasını bir işle ilişkilendirmek için, SetInformationJobObject işlevini JobObjectAssociateCompletionPortInformation iş nesnesi bilgi sınıfı ve JOBOBJECT_ASSOCIATE_COMPLETION_PORT yapısına yönelik bir işaretçi ile kullanın. İş etkin olmadığında, tamamlanma bağlantı noktasının ilişkisi sırasında durumları değişen işlemler için eksik bildirimlerin olasılığını azaltmak için bunu yapmak en iyisidir.

Tüm iletiler, iş PostQueuedCompletionStatus işlevini çağırmış gibi doğrudan işten gönderilir. bir iş parçacığının, iletileri almak için GetQueuedCompletionStatusişlevinitamamlama bağlantı noktasını izlemesi gerekir. JobObjectNotificationLimitInformation bilgi sınıfıyla ayarlanan sınırlar dışında, iletilerin tamamlanma bağlantı noktasına tesliminin garanti edilmediğini unutmayın; bir iletinin ulaşamaması, olayın gerçekleşmediği anlamına gelmez. JobObjectNotificationLimitInformation ile ayarlanan sınırlar için bildirimlerin tamamlanma bağlantı noktasına ulaşması garanti edilir. Olası iletilerin listesi için bkz. JOBOBJECT_ASSOCIATE_COMPLETION_PORT.

İşler için Kaynak Muhasebesi

İş nesnesi, sonlandırılanlar da dahil olmak üzere tüm ilişkili işlemleri için temel muhasebe bilgilerini kaydeder. Bu muhasebe bilgilerini almak için QueryInformationJobObjectişlevinikullanın. bir iş için tutulan muhasebe bilgilerinin listesi için aşağıdaki konulara bakın:

İş nesnesi iç içe yerleştirilmişse, her alt iş için muhasebe bilgileri kendi üst işinde toplanır. Daha fazla bilgi için bkz. İç İçe İşler.

İş Nesnelerini Yönetme

Belirtilen iş sonu süresi sınırı aşıldığından, tüm işlemleri sonlandırıldığında iş nesnesinin durumu işaretlenmek üzere ayarlanır. Bu olayın iş nesnesini izlemek için WaitForSingleObjectkullanın veya WaitForSingleObjectEx.

Var olan bir iş nesnesinin tanıtıcısını almak için OpenJobObject işlevini kullanın ve nesne oluşturulduğunda nesneye verilen adı belirtin. Yalnızca adlandırılmış iş nesneleri açılabilir.

bir iş nesnesi tutamacını kapatmak için CloseHandleişlevinikullanın. İş, son tanıtıcısı kapatıldığında ve ilişkili tüm işlemler sonlandırıldığında yok edilir. Ancak, işin belirtilen JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE bayrağı varsa, son iş nesnesi tutamacını kapatmak tüm ilişkili işlemleri sonlandırır ve sonra iş nesnesinin kendisini yok eder. İç içe yerleştirilmiş bir iş belirtilen JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE bayrağına sahipse, son iş nesnesi tutamacını kapatmak, hiyerarşideki iş ve alt işleri ile ilişkili tüm işlemleri sonlandırır.

İş Nesnelerini Kullanan İşlem Ağacını Yönetme

Windows 8 ve Windows Server 2012'den başlayarak, bir uygulama birden fazla iş nesnesi kullanan bir işlem ağacını yönetmek için iç içe işleri kullanabilir. Ancak, Windows 7, Windows Server 2008 R2 veya iç içe işleri desteklemeyen Windows'un önceki sürümlerinde çalışması gereken bir uygulamanın işlem ağacını başka şekillerde yönetmesi gerekir.

Bir aracın iş nesnelerini kullanan bir işlem ağacını yönetmesi gerekiyorsa ve iç içe işleri kullanmak mümkün değilse, hem araç hem de işlem ağacının üyeleri işbirliği yapmalıdır. Aşağıdaki seçeneklerden birini kullanın:

  • JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK sınırını kullanın. Araç bu sınırı kullanıyorsa, bir işlem ağacının tamamını izleyemez. Araç yalnızca işe eklediği işlemleri izleyebilir. Bu işlemler alt işlemler oluşturursa, işle ilişkilendirilmemiştir. Bu seçenekte alt işlemler diğer iş nesneleriyle ilişkilendirilebilir.

  • JOB_OBJECT_LIMIT_BREAKAWAY_OK sınırını kullanın. Araç bu sınırı kullanıyorsa, herhangi bir ağaç üyesinin açıkça ağaçtan koptüğü işlemler dışında işlem ağacının tamamını izleyebilir. Ağacın bir üyesi, CREATE_BREAKAWAY_FROM_JOB bayrağıyla CreateProcess işlevini çağırıp AssignProcessToJobObject işlevini çağırarak yeni bir iş nesnesinde alt işlem oluşturabilir. Aksi takdirde, üye AssignProcessToJobObject başarısız olduğu durumları işlemelidir.

    Ağaç araç tarafından izlenmiyorsa CREATE_BREAKAWAY_FROM_JOB bayrağının hiçbir etkisi olmaz. Bu nedenle, tercih edilen seçenek budur, ancak izlenen süreçler hakkında önceden bilgi gerektirir.

  • ne JOB_OBJECT_LIMIT_BREAKAWAY_OK ne de JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK sınırını ayarlayarak herhangi bir türde ayrıklıkları önleyin. Bu seçenekte araç, işlem ağacının tamamını izleyebilir. Ancak, bir alt işlem AssignProcessToJobObjectçağırarak kendisini veya başka bir alt işlemi bir işle ilişkilendirmeye çalışırsa, çağrı başarısız olur. İşlem belirli bir işle ilişkilendirilecek şekilde tasarlandıysa, bu hata işlemin düzgün çalışmasını engelleyebilir.