เป็นไปได้ไหมที่จะได้รับ umask ปัจจุบันของกระบวนการ? จาก/proc/<pid>/...
เช่น?
เป็นไปได้ไหมที่จะได้รับ umask ปัจจุบันของกระบวนการ? จาก/proc/<pid>/...
เช่น?
คำตอบ:
เริ่มต้นด้วย Linux kernel 4.7 ( การกระทำ ) umask /proc/<pid>/status
อยู่ในที่มีอยู่
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
หมายเหตุ: คำตอบนี้ใช้กับเมล็ด 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 ไปยังไฟล์เอาท์พุทหรือสิ่งที่คล้ายกันและนำมาจากที่นั่น
บน 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
ในเคอร์เนล