프로세스의 현재 umask

프로세스의 현재 umask

프로세스의 현재 umask를 얻을 수 있습니까? /proc/<pid>/...예를 들어?

답변1

Linux 커널 4.7부터 시작(범죄), umask를 사용할 수 있습니다 /proc/<pid>/status.

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

답변2

참고: 이 답변은 Linux 커널 4.6 이하에 적용됩니다. 바라보다@egmont의 답변최신 버전의 커널용.

umask는 procfs에 노출되지 않습니다. 가지다노력하다별 성공 없이 추가되었습니다.

gdb이미 설명한 대로 umask를 얻는 방법이 있습니다 .전에 여기에 있었나요?:

$ 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를 파일, 출력 등에 작성하고 거기에서 가져오는 것입니다.

답변3

Linux에서는 systemtap(as 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->umasktask_struct

관련 정보