Ô hiện tại của một quá trình với <pid>


Câu trả lời:


21

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

1
Điều này đã giúp trong RHEL 7.4!
Anand Varkey Philips

Có, và RHEL7.4 là 3.10.0, vì vậy tôi không hiểu nhận xét về 4.7.
hagello

Đúng vậy, một số hạt nhân cũ hơn không cung cấp thông tin về ô, ví dụ 2.6,18. Tuy nhiên, tính năng đã có trong 3.10.0. Vì vậy, bạn không nên nói rằng giải pháp này không hoạt động trước kernel 4.7.
hagello

Stéphane đã rất tốt khi chỉnh sửa bài đăng của tôi để liên kết với cam kết nói rõ khi được thêm vào, nó mới hơn nhiều so với 3.10. Có thể nó xuất hiện sớm hơn nhiều trong kernel đã vá của RHEL, nhưng chưa biết trong kernel chính, tôi không biết.
egmont

15

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ừ đó.


1
Vì vậy, câu trả lời này cũng xuất hiện khi googling các điều khoản đó, nó cũng giải thích làm thế nào để sửa đổi ô của quá trình đang chạy (vì nhận được nó yêu cầu tạm thời thay đổi nó). Tôi ban đầu đã loại bỏ nó khi tìm kiếm này.
Hugues M.

4

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.