Câu trả lời:
Bắt đầu với Linux kernel 4.7 ( cam kết ), ô có sẵn trong /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
Lưu ý: câu trả lời này áp dụng cho các nhân Linux 4.6 trở về trước. Xem câu trả lời của @ egmont cho các phiên bản mới hơn của kernel.
Các ô không được tiếp xúc trong Procfs. Có một nỗ lực để thêm nó mà không có nhiều thành công.
Có một cách để sử dụng umask gdb
, như đã được giải thích ở đây trước đây :
$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0
Hãy nhớ rằng gdb dừng quá trình và các luồng của nó, vì vậy sự thay đổi tạm thời của ô là không đáng kể.
Nếu điều đó tốt cho trường hợp của bạn, bạn có thể sử dụng oneliner này:
$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077
Một cách khác là, nếu bạn có thể kiểm soát quá trình đang chạy, để ghi ô vào một tệp, một đầu ra hoặc một cái gì đó tương tự và lấy nó từ đó.
Trên Linux, với systemtap
(như root
), bạn có thể làm
stap -e 'probe kernel.function("do_task_stat") {
printf("%o\n", $task->fs->umask);
exit()
}
probe begin {system("cat /proc/4321/stat>/dev/null")}'
Việc thực hiện cat /proc/4321/stat
sẽ kích hoạt đầu dò đó vào do_task_stat
nơi chúng ta có thể truy cập vào fs->umask
trường của quá trình tương ứng ' task_struct
trong kernel.