struktur JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)

Berisi informasi batas dasar untuk objek pekerjaan.

Sintaks

typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
  LARGE_INTEGER PerProcessUserTimeLimit;
  LARGE_INTEGER PerJobUserTimeLimit;
  DWORD         LimitFlags;
  SIZE_T        MinimumWorkingSetSize;
  SIZE_T        MaximumWorkingSetSize;
  DWORD         ActiveProcessLimit;
  ULONG_PTR     Affinity;
  DWORD         PriorityClass;
  DWORD         SchedulingClass;
} JOBOBJECT_BASIC_LIMIT_INFORMATION, *PJOBOBJECT_BASIC_LIMIT_INFORMATION;

Anggota

PerProcessUserTimeLimit

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_PROCESS_TIME, anggota ini adalah batas waktu eksekusi mode pengguna per proses, dalam tick 100 nanodetik. Jika tidak, anggota ini diabaikan.

Sistem secara berkala memeriksa untuk menentukan apakah setiap proses yang terkait dengan pekerjaan telah mengumpulkan lebih banyak waktu mode pengguna daripada batas yang ditetapkan. Jika sudah, proses dihentikan.

Jika pekerjaan berlapis, batas efektif adalah batas paling ketat dalam rantai pekerjaan.

PerJobUserTimeLimit

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_JOB_TIME, anggota ini adalah batas waktu eksekusi mode pengguna per pekerjaan, dalam tick 100-nanodetik. Jika tidak, anggota ini diabaikan.

Sistem menambahkan waktu saat ini dari proses yang terkait dengan pekerjaan ke batas ini. Misalnya, jika Anda menetapkan batas ini ke 1 menit, dan pekerjaan memiliki proses yang telah mengakumulasi 5 menit waktu mode pengguna, batas yang benar-benar diberlakukan adalah 6 menit.

Sistem secara berkala memeriksa untuk menentukan apakah jumlah waktu eksekusi mode pengguna untuk semua proses lebih besar dari batas akhir pekerjaan ini. Jika ya, tindakan yang ditentukan dalam anggota EndOfJobTimeAction dari struktur JOBOBJECT_END_OF_JOB_TIME_INFORMATION dilakukan. Secara default, semua proses dihentikan dan kode status diatur ke ERROR_NOT_ENOUGH_QUOTA.

Untuk mendaftar pemberitahuan ketika batas ini terlampaui tanpa mengakhiri proses, gunakan fungsi SetInformationJobObject dengan kelas informasi JobObjectNotificationLimitInformation .

LimitFlags

Bendera batas yang berlaku. Anggota ini adalah bitfield yang menentukan apakah anggota struktur lain digunakan. Kombinasi apa pun dari nilai berikut dapat ditentukan.

Nilai Makna
JOB_OBJECT_LIMIT_ACTIVE_PROCESS
0x00000008
Menetapkan jumlah maksimum proses aktif secara bersamaan yang terkait dengan pekerjaan. Anggota ActiveProcessLimit berisi informasi tambahan.
JOB_OBJECT_LIMIT_AFFINITY
0x00000010
Menyebabkan semua proses yang terkait dengan pekerjaan menggunakan afinitas prosesor yang sama. Anggota Afinitas berisi informasi tambahan.

Jika pekerjaan ditumpuk, afinitas prosesor yang ditentukan harus merupakan subset dari afinitas efektif dari pekerjaan induk. Jika afinitas yang ditentukan, superset dari afinitas pekerjaan induk, afinitas tersebut diabaikan dan afinitas pekerjaan induk digunakan.

JOB_OBJECT_LIMIT_BREAKAWAY_OK
0x00000800
Jika ada proses yang terkait dengan pekerjaan yang membuat proses anak menggunakan bendera CREATE_BREAKAWAY_FROM_JOB saat batas ini berlaku, proses anak tidak terkait dengan pekerjaan.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
0x00000400
Memaksa panggilan ke fungsi SetErrorMode dengan bendera SEM_NOGPFAULTERRORBOX untuk setiap proses yang terkait dengan pekerjaan.

Jika terjadi pengecualian dan sistem memanggil fungsi UnhandledExceptionFilter , debugger akan diberi kesempatan untuk bertindak. Jika tidak ada debugger, fungsi mengembalikan EXCEPTION_EXECUTE_HANDLER. Biasanya, ini akan menyebabkan penghentian proses dengan kode pengecualian sebagai status keluar.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_JOB_MEMORY
0x00000200
Menyebabkan semua proses yang terkait dengan pekerjaan untuk membatasi jumlah pekerjaan dari memori yang diterapkan. Ketika proses mencoba menerapkan memori yang akan melebihi batas seluruh pekerjaan, proses gagal. Jika objek pekerjaan dikaitkan dengan port penyelesaian, pesan JOB_OBJECT_MSG_JOB_MEMORY_LIMIT dikirim ke port penyelesaian.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

Untuk mendaftar pemberitahuan ketika batas ini terlampaui sambil memungkinkan proses untuk terus menerapkan memori, gunakan fungsi SetInformationJobObject dengan kelas informasi JobObjectNotificationLimitInformation .

JOB_OBJECT_LIMIT_JOB_TIME
0x00000004
Menetapkan batas waktu eksekusi mode pengguna untuk pekerjaan tersebut. Anggota PerJobUserTimeLimit berisi informasi tambahan. Bendera ini tidak dapat digunakan dengan JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME.
JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
0x00002000
Menyebabkan semua proses yang terkait dengan pekerjaan berakhir ketika handel terakhir untuk pekerjaan ditutup.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME
0x00000040
Mempertahankan batas waktu pekerjaan apa pun yang sebelumnya Anda tetapkan. Selama bendera ini ditetapkan, Anda dapat menetapkan batas waktu per pekerjaan sekali, lalu mengubah batas lain dalam panggilan berikutnya. Bendera ini tidak dapat digunakan dengan JOB_OBJECT_LIMIT_JOB_TIME.
JOB_OBJECT_LIMIT_PRIORITY_CLASS
0x00000020
Menyebabkan semua proses yang terkait dengan pekerjaan menggunakan kelas prioritas yang sama. Untuk informasi selengkapnya, lihat Prioritas Penjadwalan. Anggota PriorityClass berisi informasi tambahan.

Jika pekerjaan ditumpuk, kelas prioritas yang efektif adalah kelas prioritas terendah dalam rantai pekerjaan.

JOB_OBJECT_LIMIT_PROCESS_MEMORY
0x00000100
Menyebabkan semua proses yang terkait dengan pekerjaan membatasi memori yang diterapkan. Ketika proses mencoba menerapkan memori yang akan melebihi batas per proses, proses gagal. Jika objek pekerjaan dikaitkan dengan port penyelesaian, pesan JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT dikirim ke port penyelesaian.

Jika pekerjaan ditumpuk, batas memori yang efektif adalah batas memori yang paling ketat dalam rantai pekerjaan.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_PROCESS_TIME
0x00000002
Menetapkan batas waktu eksekusi mode pengguna untuk setiap proses yang saat ini aktif dan untuk semua proses di masa mendatang yang terkait dengan pekerjaan. Anggota PerProcessUserTimeLimit berisi informasi tambahan.
JOB_OBJECT_LIMIT_SCHEDULING_CLASS
0x00000080
Menyebabkan semua proses dalam pekerjaan menggunakan kelas penjadwalan yang sama. Anggota SchedulingClass berisi informasi tambahan.

Jika pekerjaan ditumpuk, kelas penjadwalan yang efektif adalah kelas penjadwalan terendah dalam rantai pekerjaan.

JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK
0x00001000
Memungkinkan proses apa pun yang terkait dengan pekerjaan untuk membuat proses anak yang tidak terkait dengan pekerjaan.

Jika pekerjaan berlapis dan objek pekerjaan langsung memungkinkan pelarian, proses anak memisahkan diri dari objek pekerjaan langsung dan dari setiap pekerjaan dalam rantai pekerjaan induk, meningkatkan hierarki sampai mencapai pekerjaan yang tidak mengizinkan pelarian. Jika objek pekerjaan langsung tidak memungkinkan breakaway, proses anak tidak memecah bahkan jika pekerjaan dalam rantai pekerjaan induknya memungkinkannya.

Batas ini memerlukan penggunaan struktur JOBOBJECT_EXTENDED_LIMIT_INFORMATION . Anggota BasicLimitInformation-nya adalah struktur JOBOBJECT_BASIC_LIMIT_INFORMATION .

JOB_OBJECT_LIMIT_SUBSET_AFFINITY
0x00004000
Memungkinkan proses menggunakan subset afinitas prosesor untuk semua proses yang terkait dengan pekerjaan. Nilai ini harus dikombinasikan dengan JOB_OBJECT_LIMIT_AFFINITY.

Windows Server 2008, Windows Vista, Windows Server 2003 dan Windows XP: Bendera ini didukung dimulai dengan Windows 7 dan Windows Server 2008 R2.

JOB_OBJECT_LIMIT_WORKINGSET
0x00000001
Menyebabkan semua proses yang terkait dengan pekerjaan menggunakan ukuran set kerja minimum dan maksimum yang sama. Anggota MinimumWorkingSetSize dan MaximumWorkingSetSize berisi informasi tambahan.

Jika pekerjaan berlapis, ukuran set kerja yang efektif adalah ukuran set kerja terkecil dalam rantai pekerjaan.

MinimumWorkingSetSize

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_WORKINGSET, anggota ini adalah ukuran set kerja minimum dalam byte untuk setiap proses yang terkait dengan pekerjaan. Jika tidak, anggota ini diabaikan.

Jika MaximumWorkingSetSize bukan nol, MinimumWorkingSetSize tidak boleh nol.

MaximumWorkingSetSize

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_WORKINGSET, anggota ini adalah ukuran set kerja maksimum dalam byte untuk setiap proses yang terkait dengan pekerjaan. Jika tidak, anggota ini diabaikan.

Jika MinimumWorkingSetSize bukan nol, MaximumWorkingSetSize tidak boleh nol.

ActiveProcessLimit

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_ACTIVE_PROCESS, anggota ini adalah batas proses aktif untuk pekerjaan tersebut. Jika tidak, anggota ini diabaikan.

Jika Anda mencoba mengaitkan proses dengan pekerjaan, dan ini menyebabkan jumlah proses aktif melebihi batas ini, proses dihentikan dan asosiasi gagal.

Affinity

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_AFFINITY, anggota ini adalah afinitas prosesor untuk semua proses yang terkait dengan pekerjaan. Jika tidak, anggota ini diabaikan.

Afinitas harus merupakan subset dari masker afinitas sistem yang diperoleh dengan memanggil fungsi GetProcessAffinityMask . Afinitas setiap utas diatur ke nilai ini, tetapi utas bebas untuk kemudian mengatur afinitasnya, selama itu adalah subset dari masker afinitas yang ditentukan. Proses tidak dapat mengatur masker afinitas mereka sendiri.

PriorityClass

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_PRIORITY_CLASS, anggota ini adalah kelas prioritas untuk semua proses yang terkait dengan pekerjaan. Jika tidak, anggota ini diabaikan.

Proses dan utas tidak dapat mengubah kelas prioritasnya. Proses panggilan harus mengaktifkan hak istimewa SE_INC_BASE_PRIORITY_NAME .

SchedulingClass

Jika LimitFlags menentukan JOB_OBJECT_LIMIT_SCHEDULING_CLASS, anggota ini adalah kelas penjadwalan untuk semua proses yang terkait dengan pekerjaan. Jika tidak, anggota ini diabaikan.

Nilai yang valid adalah 0 hingga 9. Gunakan 0 untuk kelas penjadwalan yang paling tidak menguntungkan relatif terhadap utas lain, dan 9 untuk kelas penjadwalan yang paling menguntungkan relatif terhadap utas lain. Secara default, nilai ini adalah 5. Untuk menggunakan kelas penjadwalan yang lebih besar dari 5, proses panggilan harus mengaktifkan hak istimewa SE_INC_BASE_PRIORITY_NAME .

Keterangan

Proses masih dapat mengosongkan set kerjanya menggunakan fungsi SetProcessWorkingSetSize dengan (SIZE_T)-1, bahkan saat JOB_OBJECT_LIMIT_WORKINGSET digunakan. Namun, Anda tidak dapat menggunakan SetProcessWorkingSetSize mengubah ukuran set kerja minimum atau maksimum proses dalam objek pekerjaan.

Sistem menambahkan jumlah proses aktif saat Anda mencoba mengaitkan proses dengan pekerjaan. Jika batas terlampaui, sistem mengurangi jumlah proses aktif hanya ketika proses berakhir dan semua handel ke proses ditutup. Oleh karena itu, jika Anda memiliki handel terbuka untuk proses yang telah dihentikan dengan cara seperti itu, Anda tidak dapat mengaitkan proses baru apa pun sampai handel ditutup dan jumlah proses aktif di bawah batas.

Persyaratan

   
Klien minimum yang didukung Windows XP [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Header winnt.h (sertakan Windows.h)

Lihat juga

GetProcessAffinityMask

JOBOBJECT_END_OF_JOB_TIME_INFORMATION

JOBOBJECT_EXTENDED_LIMIT_INFORMATION

JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION

QueryInformationJobObject

SetInformationJobObject

SetProcessWorkingSetSize