GNU/Linux >> Linux の 問題 >  >> Linux

<pid> を持つプロセスの現在の umask

Linux カーネル 4.7 (コミット) から、umask は /proc/<pid>/status で使用できます。 .

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

umask は procfs では公開されません。追加する試みがありましたが、あまり成功しませんでした.

gdb を使用して umask を取得する方法があります 、前にここで説明したように:

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

gdb はプロセスとそのスレッドを停止するため、umask の一時的な変更は無視できることに注意してください。

それがあなたの場合に適している場合は、このワンライナーを使用できます:

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

もう 1 つの方法は、実行中のプロセスを制御できる場合、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


Linux
  1. 手作業でコンテナを構築する:PID名前空間

  2. Linux –現在のプロセスでネットワークの共有を解除する方法は?

  3. どのプロセスにPid0がありますか?

  1. Pidのないプロセスを特定する方法は?

  2. タイムゾーンで開始時間を処理しますか?

  3. PHP でリアルタイム出力を使用してプロセスを実行する

  1. PidからGeditプロセスを強制終了できませんか?

  2. Unixで実行中のプロセスの環境変数?

  3. 開始したばかりのプロセスのpidを取得する方法