Umask actuel d'un processus avec <pid>


Réponses:


21

À partir du noyau Linux 4.7 ( commit ), le umask est disponible dans /proc/<pid>/status.

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

1
Cela a aidé dans RHEL 7.4!
Anand Varkey Philips

Oui, et RHEL7.4 est 3.10.0, donc je ne comprends pas le commentaire sur 4.7.
hagello

À droite, certains noyaux plus anciens ne fournissent pas d'informations sur l'umask, par exemple 2.6.18. Cependant, la fonctionnalité est déjà présente dans 3.10.0. Ainsi, vous ne devez pas dire que cette solution ne fonctionne pas avant le noyau 4.7.
hagello

Stéphane a eu la gentillesse de modifier mon article pour créer un lien vers le commit qui indique clairement que lorsqu'il a été ajouté, il est beaucoup plus récent que 3.10. Il est peut-être apparu beaucoup plus tôt dans le noyau corrigé de RHEL, mais pas encore dans le noyau principal, je ne sais pas.
egmont

15

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à.


1
Juste pour que cette réponse apparaisse également lors de la recherche sur ces termes, elle explique également comment modifier umask du processus en cours d'exécution (car pour l'obtenir, il faut le changer temporairement). Je l'ai d'abord rejeté lors de la recherche.
Hugues M.

4

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/statdéclencherait cette sonde sur l' do_task_statendroit où nous pouvons accéder au fs->umaskchamp du processus correspondant ' task_structdans le noyau.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.