GNU/Linux >> Tutoriels Linux >  >> Linux

umask actuel d'un processus avec <pid>

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

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

L'umask n'est pas exposé dans procfs. Il y a eu une tentative de l'ajouter sans grand succès.

Il existe un moyen d'obtenir le umask en utilisant gdb , comme cela a été expliqué ici auparavant :

$ 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 de umask est négligeable.

Si cela vous convient, vous pouvez utiliser ce oneliner :

$ 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 (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 au fs->umask champ du traitement correspondant' task_struct dans le noyau.


Linux
  1. Linux - Comment annuler le partage du réseau pour le processus actuel ?

  2. Impossible de tuer le processus Gedit à partir de son Pid ?

  3. Définir une variable avec ou sans export

  4. Obtenir par programmation le pid parent d'un autre processus ?

  5. Utilisation de la mémoire du processus en cours en C

Commande Killall sous Linux avec des exemples

La commande Wait sous Linux expliquée avec des exemples

Gestion des processus Linux améliorée avec htop

Désencombrer la gestion des processus avec ps ou systemd

Comment trouver le nom du processus à partir de son PID

Comment obtenir le pid du processus qui vient de démarrer