Réponses:
À partir du noyau Linux 4.7 ( commit ), le umask est disponible dans /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Remarque: cette réponse s'applique aux noyaux Linux 4.6 et versions antérieures. Voir la réponse de @ egmont pour les nouvelles versions du noyau.
L'umask n'est pas exposé dans procfs. On a tenté de l'ajouter sans grand succès.
Il existe un moyen d'obtenir le umask gdb
, comme cela a été expliqué ci-dessus :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Gardez à l'esprit que gdb arrête le processus et ses threads, donc le changement temporaire d'umask est négligeable.
Si cela convient à votre cas, vous pouvez utiliser ce revêtement:
$ 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, si vous pouvez contrôler le processus en cours, d'écrire le umask dans un fichier, une sortie ou quelque chose de similaire et de l'obtenir à partir de là.
Sous Linux, avec systemtap
(as 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 l' do_task_stat
endroit où nous pouvons accéder au fs->umask
champ du processus correspondant ' task_struct
dans le noyau.