umask ปัจจุบันของกระบวนการด้วย <pid>


11

เป็นไปได้ไหมที่จะได้รับ umask ปัจจุบันของกระบวนการ? จาก/proc/<pid>/...เช่น?


1
หากคุณไม่ใช่คนใจร้อนโดยใช้ gdb มีวิธีที่ไม่เป็นมิตรต่อผู้ใช้ในการรับอินฟอร์นี้: stackoverflow.com/questions/165212/…
MelBurslan

คำตอบ:


21

เริ่มต้นด้วย Linux kernel 4.7 ( การกระทำ ) umask /proc/<pid>/statusอยู่ในที่มีอยู่

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

1
สิ่งนี้ช่วยใน RHEL 7.4!
Anand Varkey Philips

ใช่และ RHEL7.4 คือ 3.10.0 ดังนั้นฉันไม่เข้าใจความคิดเห็นเกี่ยวกับ 4.7
hagello

ถูกต้องเมล็ดที่แก่กว่าบางอันไม่ได้ให้ข้อมูลเกี่ยวกับ umask เช่น 2.6.18 อย่างไรก็ตามฟีเจอร์นี้มีอยู่แล้วใน 3.10.0 ดังนั้นคุณไม่ควรพูดว่าวิธีนี้ใช้ไม่ได้กับ kernel 4.7
hagello

Stéphaneใจดีพอที่จะแก้ไขโพสต์ของฉันเพื่อลิงก์ไปยังการคอมมิชชันที่กล่าวอย่างชัดเจนว่าเมื่อมีการเพิ่มมันใหม่กว่า 3.10 มาก บางทีมันอาจจะปรากฏก่อนหน้านี้ในเคอร์เนลที่แพทช์ของ RHEL แต่ฉันยังไม่รู้ในเคอร์เนลที่ฉีดออกมา
egmont

15

หมายเหตุ: คำตอบนี้ใช้กับเมล็ด Linux 4.6 และรุ่นก่อนหน้า ดูที่คำตอบของ @ egmontสำหรับเคอร์เนลเวอร์ชันใหม่

umask ไม่ได้ถูกเปิดเผยใน procfs มีความพยายามที่จะเพิ่มโดยไม่ประสบความสำเร็จมาก

มีวิธีรับ umask ใช้gdbตามที่อธิบายไว้ที่นี่ก่อน :

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

โปรดทราบว่า gdb จะหยุดกระบวนการและเธรดดังนั้นการเปลี่ยนแปลง umask ชั่วคราวจึงไม่มีความสำคัญ

หากเป็นสิ่งที่ดีสำหรับกรณีของคุณคุณสามารถใช้ oneliner นี้:

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

อีกทางเลือกหนึ่งคือถ้าคุณสามารถควบคุมกระบวนการทำงานเพื่อเขียน umask ไปยังไฟล์เอาท์พุทหรือสิ่งที่คล้ายกันและนำมาจากที่นั่น


1
เพียงเพื่อให้คำตอบนี้ยังแสดงให้เห็นขึ้นเมื่อ googling คำเหล่านั้นก็ยังได้อธิบายถึงวิธีการแก้ไข umask ของกระบวนการทำงาน (ตั้งแต่ได้รับมันต้องเปลี่ยนมันชั่วคราว) ฉันเริ่มต้นมันเมื่อค้นหานี้
Hugues M.

4

บน Linux ด้วยsystemtap(ตามroot) คุณสามารถทำได้

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

การทำเช่นcat /proc/4321/statนั้นจะทำให้เกิดโพรบนั้นdo_task_statซึ่งเราสามารถเข้าถึงfs->umaskฟิลด์ของกระบวนการที่เกี่ยวข้อง ' task_structในเคอร์เนล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.