<পিড> সহ একটি প্রক্রিয়ার বর্তমান উমাস্ক


11

কোনও প্রক্রিয়ার বর্তমান উমাস্ক পাওয়া কি সম্ভব? /proc/<pid>/...উদাহরণস্বরূপ থেকে ?


1
: আপনি gdb ব্যবহার হৃদয়ের ভীরু না হন, তাহলে সেখানে একটি নো-তাই-ইউজার বান্ধব এখানে এই infor পাবার উপায় stackoverflow.com/questions/165212/...
MelBurslan

উত্তর:


21

লিনাক্স কার্নেল ৪.7 ( কমিট ) দিয়ে শুরু করে, উমাস্কটি উপলব্ধ /proc/<pid>/status

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

1
এটি RHEL 7.4 এ সহায়তা করেছে!
আনন্দ বার্কি ফিলিপস

হ্যাঁ, এবং RHEL7.4 হল 3.10.0, সুতরাং আমি 4.7 সম্পর্কে মন্তব্য বুঝতে পারি না।
হিগেলো

ঠিক আছে, কিছু পুরানো কার্নেলগুলি উমাস্ক সম্পর্কে তথ্য সরবরাহ করে না, উদাহরণস্বরূপ 2.6.18। তবে বৈশিষ্ট্যটি ইতিমধ্যে সেখানে 3.10.0 এ রয়েছে। সুতরাং, আপনার উচিত হবে না যে এই সমাধান কার্নেল ৪.7 এর আগে কাজ করে না।
হিগেলো

স্টাফেন আমার পোস্টটি সম্পাদন করার মতো যথেষ্ট ছিল যে প্রতিশ্রুতিবদ্ধতার সাথে লিঙ্ক করতে স্পষ্টভাবে বলা হয়েছে যে এটি যুক্ত হওয়ার পরে এটি 3.10 এর চেয়ে অনেক নতুন। সম্ভবত এটি আরএইচইএল এর প্যাচড কার্নেলে অনেক আগে উপস্থিত হয়েছিল, তবে এখনও মূল লাইন কার্নেলটিতে নেই, আমি জানি না।
উদাহরণস্বরূপ

15

দ্রষ্টব্য: এই উত্তরটি লিনাক্স কার্নেলগুলিতে 4.6 এবং তার আগের ক্ষেত্রে প্রযোজ্য। কার্নেলের নতুন সংস্করণগুলির জন্য @ এমমন্টের উত্তর দেখুন ।

উমাস্কটি প্রকফগুলিতে প্রকাশিত হয় না। খুব বেশি সাফল্য ছাড়াই এটি যুক্ত করার চেষ্টা করা হয়েছিল ।

উমাস্কটি ব্যবহার করার উপায় রয়েছে, যা এখানে আগেgdb ব্যাখ্যা করা হয়েছে :

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

মনে রাখবেন যে জিডিবি প্রক্রিয়া এবং এর থ্রেডগুলি থামায়, তাই উমাস্কের অস্থায়ী পরিবর্তন নগণ্য।

যদি এটি আপনার ক্ষেত্রে ভাল হয় তবে আপনি এই অনেলাইনারটি ব্যবহার করতে পারেন:

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

অন্য বিকল্পটি হ'ল, যদি আপনি চলমান প্রক্রিয়াটি নিয়ন্ত্রণ করতে পারেন তবে একটি ফাইল, একটি আউটপুট বা অনুরূপ কিছুতে উমাস্ক লিখতে এবং সেখান থেকে এটি পেতে পারেন।


1
এই শর্তাবলী গুগল করার সময় এই উত্তরটিও প্রদর্শিত হয়, এটি চলমান প্রক্রিয়াটির উমাস্ককে কীভাবে সংশোধন করতে হয় তাও ব্যাখ্যা করে (যেহেতু এটি পাওয়ার পরে এটি অস্থায়ীভাবে পরিবর্তিত হওয়া দরকার)। এটি অনুসন্ধান করার সময় আমি প্রথমে এটি বাতিল করে দিয়েছিলাম।
হিউজ এম।

4

লিনাক্স-এ, 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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.