Aktuelle Umask eines Prozesses mit <pid>


Antworten:


20

Ab Linux Kernel 4.7 ( Commit ) ist die Umask in verfügbar /proc/<pid>/status.

$ grep '^Umask:' "/proc/$$/status"
Umask:  0022

1
Dies hat in RHEL 7.4 geholfen!
Anand Varkey Philips

Ja, und RHEL7.4 ist 3.10.0, daher verstehe ich den Kommentar zu 4.7 nicht.
Hagello

Richtig, einige ältere Kernel liefern keine Informationen über die Umask, zum Beispiel 2.6.18. Das Feature ist jedoch bereits in 3.10.0 vorhanden. Daher sollten Sie nicht sagen, dass diese Lösung vor Kernel 4.7 nicht funktioniert.
Hagello

Stéphane war so freundlich, meinen Beitrag so zu bearbeiten, dass er auf das Commit verweist, das eindeutig besagt, dass es viel neuer als 3.10 ist, als es hinzugefügt wurde. Vielleicht erschien es viel früher im gepatchten Kernel von RHEL, aber noch nicht im Hauptkernel, ich weiß es nicht.
egmont

15

Hinweis: Diese Antwort gilt für Linux-Kernel 4.6 und früher. Siehe @ egmonts Antwort für neuere Versionen des Kernels.

Die Umask ist in procfs nicht verfügbar. Es wurde versucht , es ohne großen Erfolg hinzuzufügen.

Es gibt eine Möglichkeit, die Umask zu verwenden gdb, wie hier zuvor erläutert wurde :

$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0

Beachten Sie, dass gdb den Prozess und seine Threads stoppt, sodass die vorübergehende Änderung von umask vernachlässigbar ist.

Wenn das für Ihren Fall gut ist, können Sie diesen Oneliner verwenden:

$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077

Eine andere Alternative besteht darin, wenn Sie den laufenden Prozess steuern können, die Umask in eine Datei, eine Ausgabe oder ähnliches zu schreiben und von dort abzurufen.


1
Damit diese Antwort auch beim Googeln dieser Begriffe angezeigt wird , wird auch erläutert, wie Sie die Umask des laufenden Prozesses ändern können (da für das Abrufen diese vorübergehend geändert werden muss). Ich habe es bei der Suche zunächst abgelehnt.
Hugues M.

4

Unter Linux könnten Sie mit systemtap(as root) tun

stap -e 'probe kernel.function("do_task_stat") {
           printf("%o\n", $task->fs->umask);
           exit()
         }
         probe begin {system("cat /proc/4321/stat>/dev/null")}'

Wenn Sie a cat /proc/4321/statausführen, wird diese Prüfung ausgelöst, do_task_statwenn wir auf das fs->umaskFeld des entsprechenden Prozesses task_structim Kernel zugreifen können .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.