Wie kann ich die Priorität eines Prozesses erhöhen, ohne ihm Superuserrechte zu geben?

3793
Myrddin Emrys

Ich habe einen Service mit hoher Priorität, mit dem ich beginne sudo nice -n -10 process. Dieser Prozess benötigt jedoch keine Superuser-Rechte, mit Ausnahme der Prioritätserhöhung. Schön erfordert jedoch Superuser-Berechtigungen, um die Priorität zu erhöhen.

Wie führe ich einen Prozess mit erhöhter Priorität aus, ohne ihn auch als root auszuführen?

4

3 Antworten auf die Frage

3
maxelost

Check out /etc/security/limits.conf. Dort können Sie festlegen, welche Prioritäten Benutzer oder Gruppen verwenden dürfen. Handbuchseite:man 5 limits.conf

Dankesehr. Ich kann die minimale Priorität für den Benutzer auf -10 einstellen und Sudo vollständig überspringen. Myrddin Emrys vor 13 Jahren 0
1
Myrddin Emrys

Eine Möglichkeit ist diese (an die ich gerade nach dem Nachdenken dachte):

sudo nice -10 sudo -u user command

Es scheint jedoch, dass es eine elegantere Methode geben sollte.

1
LaC

Die andere Möglichkeit besteht sudo renicedarin, die Priorität des Prozesses nach dem Start zu ändern. Um die PID des Prozesses zu erhalten, können Sie psund verwenden sed, oder Sie können ihn im Hintergrund starten und den Prozess direkt von der Shell abrufen:

process & pid=$! sudo renice -10 $pid fg $pid # if you don't want it in background 

Wenn der Prozess andere Prozesse hervorbringt und beendet wird, ist dies wahrscheinlich zu der Zeit geschehen, zu der renice ausgeführt wird. Daher sollten Sie psstattdessen die PID des untergeordneten Prozesses / der untergeordneten Prozesse abrufen und diese umbenennen.

Das würde funktionieren, aber ich denke, es ist noch unbeholfener als die Antwort, die ich gab (`sudo nice -10 sudo -u user command`) Myrddin Emrys vor 13 Jahren 0
Diese Antwort greift jedoch nicht in die Umgebung ein wie "sudo". `Sudo` setzt zum Beispiel` LD_LIBRARY_PATH` auch mit `-E` zurück. Trevor Robinson vor 10 Jahren 0
Beachten Sie auch, dass "fg" nur direkt von einer interaktiven Shell aus verwendet werden kann. Sie müssen stattdessen für Skripte "wait" verwenden. Trevor Robinson vor 10 Jahren 0