Yanıtlar:
Linux çekirdeği 4.7 ( taahhüt ) ile başlayarak , umask mevcuttur /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Not: Bu cevap Linux çekirdeği 4.6 ve öncesi için geçerlidir. Çekirdeğin daha yeni sürümleri için @ egmont'un cevabına bakınız .
Umask procfs'ye maruz kalmaz. Çok başarılı olmadan ekleme denemesi yapıldı .
Burada daha öncegdb
açıklandığı gibi, umask'ı kullanmanın bir yolu var :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Gdb'nin işlemi ve iş parçacıklarını durdurduğunu unutmayın, bu nedenle umask'ın geçici olarak değişmesi ihmal edilebilir.
Durumunuz için iyi ise, bu oneliner'ı kullanabilirsiniz:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Başka bir seçenek, çalışan işlemi kontrol edebiliyorsanız, umask'ı bir dosyaya, çıktıya veya benzer bir şeye yazmak ve oradan almaktır.
Linux'ta, systemtap
(as root
) ile şunları yapabilirsiniz:
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Bir işlem yapmak, çekirdeğin ilgili işlemin alanına erişebileceğimiz cat /proc/4321/stat
probu tetikler .do_task_stat
fs->umask
task_struct