프로세스의 현재 umask를 얻을 수 있습니까? 에서 /proc/<pid>/...
예를 들면?
답변
Linux 커널 4.7 ( 커밋 )부터 umask는에서 사용할 수 있습니다 /proc/<pid>/status
.
$ grep '^Umask:' "/proc/$$/status"
Umask: 0022
답변
참고 :이 답변은 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를 파일, 출력 또는 이와 유사한 것으로 작성하여 거기에서 가져 오는 것입니다.
답변
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