Est-il possible d'obtenir actuel mask d'un processus? De /proc/<pid>/...
par exemple?
Commençant par le noyau Linux 4.7 ( COMMIS ), l'umask est disponible en /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Remarque: cette réponse s'applique aux noyaux de Linux 4.6 et plus tôt. Voir @ Réponse d'Egmont Pour les versions plus récentes du noyau.
L'omasque n'est pas exposé dans les procfs. Il y avait ne tentative pour l'ajouter sans beaucoup de succès.
Il y a moyen d'obtenir l'umask en utilisant gdb
, comme cela a été expliqué ici avant :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
N'oubliez pas que GDB arrête le processus et ses threads, de sorte que le changement temporaire d'omasque est négligeable.
Si c'est bon pour votre cas, vous pouvez utiliser cet ONLINER:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Une autre alternative est que si vous pouvez contrôler le processus en marche, écrire l'umask dans un fichier, une sortie ou quelque chose de similaire et de l'obtenir à partir de là.
Sur Linux, avec systemtap
(comme root
), vous pourriez faire
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Faire un cat /proc/4321/stat
déclencherait cette sonde sur do_task_stat
Où nous pouvons accéder à fs->umask
champ du processus correspondant 'task_struct
dans le noyau.