GNU/Linux >> Belajar Linux >  >> Linux

umask saat ini dari proses dengan <pid>

Dimulai dengan kernel Linux 4.7 (komit), umask tersedia di /proc/<pid>/status .

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

Umask tidak diekspos di procfs. Ada upaya untuk menambahkannya tanpa banyak keberhasilan.

Ada cara untuk mendapatkan umask menggunakan gdb , seperti yang telah dijelaskan di sini sebelumnya:

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

Perlu diingat bahwa gdb menghentikan proses dan utasnya, sehingga perubahan umask sementara dapat diabaikan.

Jika itu cocok untuk kasus Anda, Anda dapat menggunakan oneliner ini:

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

Alternatif lainnya adalah, jika Anda dapat mengontrol proses yang berjalan, menulis umask ke file, output, atau yang serupa dan mendapatkannya dari sana.


Di Linux, dengan systemtap (sebagai root ), Anda bisa melakukannya

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

Melakukan cat /proc/4321/stat akan memicu penyelidikan itu pada do_task_stat tempat kita dapat mengakses fs->umask bidang proses yang sesuai 'task_struct di kernel.


Linux
  1. Membangun wadah dengan tangan:Ruang nama PID

  2. Linux – Bagaimana Cara Berhenti Berbagi Jaringan Untuk Proses Saat Ini?

  3. Tidak Dapat Membunuh Proses Gedit Dari Pidnya?

  1. Proses Yang Memiliki Pid 0?

  2. Bagaimana Mengidentifikasi Proses Yang Tidak Memiliki Pid?

  3. Jalankan proses dengan output realtime di PHP

  1. Proses Waktu Mulai Dengan Zona Waktu?

  2. Mendefinisikan variabel dengan atau tanpa ekspor

  3. Secara terprogram dapatkan induk pid dari proses lain?