Поточний умаск процесу з <pid>


11

Чи можливо отримати поточний умаск процесу? З /proc/<pid>/...наприклад?


1
Якщо ви не зі слабкими нервами з допомогою GDB, є не настільки зручний спосіб отримати цю Infor тут: stackoverflow.com/questions/165212 / ...
MelBurslan

Відповіді:


21

Починаючи з ядра Linux 4.7 ( фіксувати ), umask доступний в /proc/<pid>/status.

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

1
Це допомогло в RHEL 7.4!
Ананд Варкі Філіпс

Так, і RHEL7.4 - це 3.10.0, тому я не розумію коментар про 4.7.
hagello

Правильно, деякі старі ядра не надають інформацію про umask, наприклад 2.6.18. Однак функція вже є в 3.10.0. Таким чином, не слід говорити, що це рішення не працює перед ядром 4.7.
hagello

Stéphane був досить люб’язним, щоб відредагувати мою публікацію, щоб посилатися на комітет, який чітко говорить про те, коли він був доданий, це набагато новіше, ніж 3.10. Можливо, воно з’явилося набагато раніше в патчевому ядрі RHEL, але ще не в основному ядрі, я не знаю.
Егмонт

15

Примітка: ця відповідь стосується ядер Linux 4.6 та новіших версій. Дивіться відповідь @ egmont щодо новіших версій ядра.

Умаск не піддається витримці. Була спроба додати його без особливого успіху.

Існує спосіб отримати umask за допомогою gdb, як було пояснено тут раніше :

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

Майте на увазі, що gdb зупиняє процес та його нитки, тому тимчасова зміна umask є незначною.

Якщо це добре для вашого випадку, ви можете використовувати цей oneliner:

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

Інша альтернатива - якщо ви можете керувати запущеним процесом, написати umask у файл, вихід або щось подібне і отримати його звідти.


1
Так що ця відповідь також з’являється при гугленні цих термінів, вона також пояснює, як змінити umask запущеного процесу (оскільки отримання його вимагає тимчасової зміни). Я спочатку звільнив його, коли шукав це.
Hugues M.

4

В Linux, з systemtap(як root), ви могли б це зробити

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

Виконання a cat /proc/4321/statзапустить цей зонд про те, do_task_statде ми можемо отримати доступ до fs->umaskполя відповідного процесу ' task_structв ядрі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.