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/statsẽ kích hoạt đầu dò đó vào do_task_statnơi chúng ta có thể truy cập vào fs->umasktrường của quá trình tương ứng ' task_structtrong kernel.