Warum kann ich die Priorität des Prozesses durch Verwendung der Funktion nice () mit einer typischen Benutzerberechtigung (außer ROOT) in Linux verringern?

1144

Wie ich es verstehe, kann jeder Benutzer in Linux die Priorität jedes Prozesses ändern, indem er die Befehle nice und renice verwendet. Ich weiß auch, dass alle Benutzer die Priorität von Prozessen erhöhen können, und der einzige Benutzer, der diese Priorität verringern kann, ist ROOT. Wenn ich dies in einer Terminalumgebung mit diesen Befehlen teste, war alles in Ordnung. Das heißt, wenn ich die Priorität des Prozesses verringern möchte, gibt das System die Textmeldung "Erlaubnis verweigert" aus. Wie ich auch standardmäßig weiß, laufen alle Prozesse mit Priorität 0. Wenn ich also die Priorität eines Prozesses durch eine negative Zahl einstellen möchte, muss das System einen Fehlertext ausgeben. Wenn ich dieses C-Programm ausführe:

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

Ich habe erwartet, dass das System einen Fehler anzeigt. Das Programm läuft jedoch problemlos. Obwohl das Programm mit einer typischen Benutzerberechtigung ausgeführt wird. Ich möchte wissen, warum, wenn ich die Priorität des Prozesses mit Hilfe des Befehls renice entsprechend dem erwarteten Fehler des Systems verringern möchte, aber wenn ich die Priorität des Prozesses mithilfe der nice()Funktion verringern möchte, geben die Programme keinen Fehler aus. Ist dieser Satz All users just can increase the priority of process and the only user that can decrease this priority is ROOT.richtig?

0
Vielleicht meinen Sie "Steigerung der Freundlichkeit"? Die Neugier eines Prozesses ist ein entgegengesetzter Begriff zur Priorität. Alle Prozesse können die Prozessorauslastung verringern (== ihre Freundlichkeit erhöhen, == die Priorität herabsetzen), aber nur Root-Prozesse können mehr als zuvor fressen. Dmytro Sirenko vor 11 Jahren 0
Ja, genau meine Frage bezieht sich auf Niceness. Sie schreiben: "Alle Prozesse können die Prozessorauslastung verringern, aber nur Root-Prozesse können mehr essen als zuvor." Können Sie das erklären, bitte? Ich konnte das nicht richtig verstehen. vor 11 Jahren 0
Es ist eine Sicherheitsentscheidung: Denial of Service unmöglich zu machen, denke ich. Benutzer müssen die Priorität von Prozessen erhöhen, aber einige böswillige Benutzer können dies verwenden, um ein System herunterzufahren, sodass nur der Root (ein wirklich vertrauenswürdiger Benutzer) dazu berechtigt ist. Dmytro Sirenko vor 11 Jahren 0
ja, aber warum kann ich, wenn ich die Funktion "nice ()" in meinem Programm verwende, die Priorität des Prozesses herabsetzen (obwohl ich meinen typischen Benutzer habe!)? vor 11 Jahren 0

2 Antworten auf die Frage

1
tink

Azad, du kannst den Nettowert NICHT reduzieren. Sie haben sich einfach dafür entschieden, das Ergebnis Ihrer Arbeit nicht zu überprüfen. Überprüfen Sie den Inhalt von r, nachdem Sie versuchen, ein negatives Inkrement anzuwenden. Es wird -1 sein, was bedeutet, dass Ihr Versuch fehlgeschlagen ist.

0
Sunil Bojanapally
#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"); } 

Nachdem Sie die Prozesspriorität auf den erforderlichen Pegel eingestellt haben, verzögern Sie um 1 Minuten, damit Sie die geänderte Priorität im Befehl top / ps überprüfen können. Überprüfen Sie diesen Link unter http://linux.die.net/man/2/setpriority