struktur JOBOBJECT_BASIC_LIMIT_INFORMATION (winnt.h)
Berisi informasi batas dasar untuk objek pekerjaan.
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;
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 |
---|---|
|
Menetapkan jumlah maksimum proses aktif secara bersamaan yang terkait dengan pekerjaan. Anggota ActiveProcessLimit berisi informasi tambahan. |
|
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. |
|
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 . |
|
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 . |
|
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 . |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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. |
|
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 . |
|
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. |
|
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 .
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.
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) |
JOBOBJECT_END_OF_JOB_TIME_INFORMATION
JOBOBJECT_EXTENDED_LIMIT_INFORMATION