ทำไมฉันสามารถลดความสำคัญของกระบวนการโดยใช้ฟังก์ชั่น nice () ด้วยการอนุญาตจากผู้ใช้ทั่วไป (ยกเว้น ROOT) ใน linux?


0

ดังที่ฉันเข้าใจผู้ใช้ทุกคนใน linux สามารถเปลี่ยนลำดับความสำคัญของทุกกระบวนการโดยใช้คำสั่ง nice และ renice นอกจากนี้ฉันรู้ว่าผู้ใช้ทั้งหมดสามารถเพิ่มลำดับความสำคัญของกระบวนการและผู้ใช้เท่านั้นที่สามารถลดลำดับความสำคัญนี้คือ ROOT เมื่อฉันทดสอบสิ่งนี้ในสภาพแวดล้อมของ Terminal โดยใช้คำสั่งเหล่านี้ทุกอย่างก็โอเค หมายความว่าเมื่อฉันต้องการลดระดับความสำคัญของกระบวนการระบบจะออกข้อความ "การปฏิเสธสิทธิ์" ตามที่ฉันรู้ด้วยโดยค่าเริ่มต้นกระบวนการทั้งหมดจะทำงานโดยมีลำดับความสำคัญ0ดังนั้นเมื่อฉันต้องการตั้งค่าลำดับความสำคัญของกระบวนการด้วยจำนวนลบระบบจะต้องออกข้อความแสดงข้อผิดพลาด เมื่อฉันรันโปรแกรมภาษา C นี้:

#include<stdio.h>
#include<unistd.h>
void main()
{
int n=10,r;
r=nice(n);
while(1)
    printf("Test);
}

ฉันคาดว่าระบบจะแสดงข้อผิดพลาด แต่โปรแกรมทำงานได้โดยไม่มีปัญหา! แม้ว่าโปรแกรมจะทำงานโดยได้รับอนุญาตจากผู้ใช้ทั่วไป ฉันต้องการที่จะรู้ว่าทำไมเมื่อฉันต้องการลดลำดับความสำคัญของกระบวนการโดยใช้คำสั่ง renice ตามสิ่งที่คาดว่าระบบจะแสดงข้อผิดพลาด แต่เมื่อฉันต้องการลดลำดับความสำคัญของกระบวนการโดยการใช้nice()ฟังก์ชั่น ประโยคนี้All users just can increase the priority of process and the only user that can decrease this priority is ROOT.ถูกต้องหรือไม่


บางทีคุณอาจหมายถึง "เพิ่มความสวยงาม" ความดีของกระบวนการเป็นแนวคิดที่ตรงกันข้ามกับลำดับความสำคัญ กระบวนการทั้งหมดอาจลดการใช้งานตัวประมวลผล (== เพิ่มความสวยงาม == ลบลำดับความสำคัญ) แต่เฉพาะกระบวนการรูทเท่านั้นที่อาจกินมากกว่าเดิม
Dmytro Sirenko

ใช่คำถามของฉันเกี่ยวกับความดีคุณเขียนว่า "กระบวนการทั้งหมดอาจลดการใช้งานตัวประมวลผล แต่กระบวนการรากเท่านั้นอาจกินมากกว่าเดิม" คุณช่วยอธิบายได้มั้ยฉันไม่เข้าใจเรื่องนี้อย่างถูกต้อง

เป็นการตัดสินใจด้านความปลอดภัย: เพื่อให้การปฏิเสธบริการเป็นไปไม่ได้ฉันคิดว่า ผู้ใช้จำเป็นต้องเพิ่มลำดับความสำคัญของกระบวนการ แต่ผู้ใช้ที่ประสงค์ร้ายบางรายอาจใช้สิ่งนี้เพื่อทำให้ระบบล่มดังนั้นอนุญาตให้เฉพาะผู้ใช้ root (ผู้ใช้ที่เชื่อถือได้จริงๆ) เท่านั้น
Dmytro Sirenko

ใช่ แต่ทำไมเมื่อฉันใช้nice()ฟังก์ชั่นในโปรแกรมของฉันฉันสามารถลดความสำคัญของกระบวนการ (แม้ว่าฉันจะมีผู้ใช้ทั่วไปของฉัน!)

คำตอบ:


1

Azad คุณไม่สามารถลดค่าที่น่าพอใจได้ คุณเพียงแค่เลือกที่จะไม่ตรวจสอบผลลัพธ์ของสิ่งที่คุณทำ ตรวจสอบเนื้อหาของ r หลังจากที่คุณพยายามใช้การเพิ่มเชิงลบ มันจะเป็น -1 ซึ่งหมายถึงความพยายามของคุณล้มเหลว


0
#include<stdio.h>
#include<unistd.h>
#include<sys/resource.h>
void main()
{
    int n=10;
    (void)setpriority(PRIO_PROCESS, 0, n);
    sleep(60);
    while(1)
        printf("Test");
}

หลังจากตั้งค่าระดับความสำคัญของกระบวนการเป็นระดับที่ต้องการให้หน่วงเวลาประมาณ 1 นาทีเพื่อให้เราสามารถตรวจสอบลำดับความสำคัญที่เปลี่ยนแปลงในคำสั่ง top / ps ตรวจสอบลิงค์นี้http://linux.die.net/man/2/setpriority

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.