Umask saat ini dari suatu proses dengan <pid>


Jawaban:


21

Dimulai dengan kernel Linux 4.7 ( komit ), umask tersedia di /proc/<pid>/status.

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

1
Ini membantu dalam RHEL 7.4!
Anand Varkey Philips

Ya, dan RHEL7.4 adalah 3.10.0, jadi saya tidak mengerti komentar tentang 4.7.
hagello

Benar, beberapa kernel lama tidak memberikan info tentang umask, misalnya 2.6.18. Namun, fitur tersebut sudah ada di 3.10.0. Jadi, Anda seharusnya tidak mengatakan bahwa solusi ini tidak berfungsi sebelum kernel 4.7.
hagello

Stéphane cukup baik untuk mengedit posting saya untuk menautkan ke komit yang dengan jelas mengatakan ketika ditambahkan, itu jauh lebih baru dari 3,10. Mungkin itu muncul jauh lebih awal di patch RHEL yang ditambal, tetapi belum di kernel arus utama, saya tidak tahu.
egmont

15

Catatan: jawaban ini berlaku untuk kernel Linux 4.6 dan sebelumnya. Lihat @ egmont jawaban untuk versi kernel yang lebih baru.

Umask tidak terekspos dalam proksi. Ada upaya untuk menambahkannya tanpa banyak keberhasilan.

Ada cara untuk menggunakan umask gdb, seperti yang telah dijelaskan di sini sebelumnya :

$ gdb --pid=4321
(gdb) call/o umask(0)
$1 = 077
(gdb) call umask($1)
$3 = 0

Perlu diingat bahwa gdb menghentikan proses dan utasnya, sehingga perubahan sementara umask dapat diabaikan.

Jika itu cocok untuk kasus Anda, Anda dapat menggunakan oneliner ini:

$ gdb --batch -ex 'call/o umask(0)' -ex 'call umask($1)' --pid=4321 2> /dev/null | awk '$1 == "$1" {print $3}'
077

Alternatif lain adalah, jika Anda dapat mengontrol proses yang sedang berjalan, untuk menulis umask ke file, output atau yang serupa dan mendapatkannya dari sana.


1
Hanya saja jawaban ini juga muncul ketika mencari istilah-istilah tersebut di Google, ia juga menjelaskan cara memodifikasi umask dari proses yang sedang berjalan (karena untuk mendapatkannya diperlukan untuk sementara waktu mengubahnya). Saya awalnya menolaknya saat mencari ini.
Hugues M.

4

Di Linux, dengan systemtap(as root), Anda bisa melakukannya

stap -e 'probe kernel.function("do_task_stat") {
           printf("%o\n", $task->fs->umask);
           exit()
         }
         probe begin {system("cat /proc/4321/stat>/dev/null")}'

Melakukan suatu cat /proc/4321/statakan memicu penyelidikan itu di do_task_statmana kita dapat mengakses fs->umaskbidang proses yang sesuai ' task_structdi kernel.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.