প্রশ্ন ইউনিক্স চলমান প্রক্রিয়া পরিবেশ পরিবর্তনশীল?


ইউনিক্স সিস্টেমের পরিবেশগত পরিবর্তনগুলির সাথে সম্পর্কিত কিছু সমস্যাগুলির সমাধান করতে হবে।

উইন্ডোজ এ, প্রসেস এক্সপ্লোরারের মতো একটি টুল ব্যবহার করতে পারে যা একটি নির্দিষ্ট প্রক্রিয়া নির্বাচন করতে এবং প্রতিটি পরিবেশের ভেরিয়েবলের মান দেখতে।

আমি কিভাবে ইউনিক্সে একই জিনিস সম্পাদন করতে পারি? echoing এবং env cmd বর্তমান সময়ে মান প্রদর্শন করুন, তবে চলমান প্রক্রিয়াটি বর্তমানে কী ব্যবহার করছে তা আমি দেখতে চাই।


203
2017-09-17 18:14


উত্স


যদিও / proc / <pid> / এনভায়রনমেন্টটি 0 এর আকার ধারণ করে তবে সেখানে এখনও তথ্য রয়েছে। "যদি আপনি কার্নেলের মধ্যে উইন্ডো হিসাবে এটি মনে করেন তবে এটি আরও ইন্দ্রিয়গ্রাহী করে। ফাইলটি আসলে কোনও তথ্য ধারণ করে না; এটি কেবলমাত্র কোনও পয়েন্টার হিসাবে কাজ করে যেখানে প্রকৃত প্রক্রিয়া তথ্য থাকে।" [সূত্র] - nevets1219


উত্তর:


cat /proc/<pid>/environ

আপনি যদি প্রদত্ত চলমান এক্সিকিউটেবলের পিড (গুলি) চান তবে আপনি অন্যান্য সম্ভাবনার মধ্যে এটি ব্যবহার করতে পারেন pidof:

AlberT$ pidof sshd   
30690 6512 

সম্পাদনা:

আমি সম্পূর্ণ পাঠযোগ্য আউটপুট অর্জন করতে @ টিডি মন্তব্য সম্পূর্ণরূপে উদ্ধৃত করেছি:

xargs --null --max-args=1 < /proc/<pid>/environ

262
2017-09-17 18:18



এটি পাঠযোগ্য করতে, নলগুলিকে নতুন লাইনগুলিতে রূপান্তর করুন: cat /proc/17330/environ | tr \\0 \\n - Dennis Williamson
আমি সর্বদা করি xargs --null --max-args=1 echo < /proc/PID/environ - Teddy
ভাল ব্যবহার স্ট্রিং, তার দ্রুত। বিড়াল এখনও দ্রুত :-) - Nikhil Mulley
সমগ্র /proc ফাইল সিস্টেম পোর্টেবল নয়। - Daniel H
আমি বুঝতে পারছি না কেন xargsNulls নতুন লাইন রূপান্তর ব্যবহার করার চেয়ে ভাল tr। কেউ কি আমার জন্য এটা বহন করতে পারেন? ধন্যবাদ। - Jonathan Hartley


যেহেতু এই প্রশ্নের একটি আছে UNIX ট্যাগ এবং অন্য সবাই ঠিক যেমন একটি মহান কাজ ঠিকানা হয়েছে লিনাক্স ট্যাগ, আপনি এই তথ্যটি ওএস এক্স এবং অন্যান্য BSD- derived সিস্টেম ব্যবহার করে পেতে পারেন

ps -p <PID> -wwwe

অথবা

ps -p <PID> -wwwE

এবং সঙ্গে Solaris উপর

/usr/ucb/ps -wwwe <PID>

Solaris এছাড়াও সমর্থন করে /proc ডিরেক্টরি আপনি অস্পষ্ট মনে করতে চান না ps commmand।


52
2017-09-17 20:47



আমি রান করি ps -p <পিআইডি> -ভাই ওএস এক্স 10.6 আমি সব চলমান প্রসেস তালিকা পেতে। ডান কমান্ড সঙ্গে হয় -E পতাকা, না-ই। - drAlberT
আমি ওএস এক্স 10.4 পরীক্ষা করেছি, কিন্তু 10.5 নয়। অনুযায়ী আপডেট করা হয়েছে। - Gerald Combs
এই নিখুঁত নয়। ই-বিকল্প শুধুমাত্র রিপোর্ট প্রাথমিক পরিবেশ ভেরিয়েবল। যদি ভেরিয়েবলগুলি নিজেই চলমান প্রক্রিয়া দ্বারা পরিবর্তিত হয় (উদাঃ POSIX putenv () ফাংশন ব্যবহার করে), ফলাফলগুলি আউটপুটগুলিতে প্রতিফলিত হয় না ps -p <PID> -wwE। - Kal
আপনার দ্বারা মালিকানাধীন প্রক্রিয়া env vars দেখতে না একটি পছন্দসই বৈশিষ্ট্য মত শোনাচ্ছে। @ DRAlberT এর লিনাক্স ভিত্তিক উত্তর ব্যবহার করে এটিও কেস /proc/PID/environ। যারা ফাইল শুধুমাত্র প্রক্রিয়ার মালিক দ্বারা পঠনযোগ্য। - Jonathan Hartley
@ ইয়ানি এটা সম্ভব, কিন্তু এটি অনেক কঠিন, চলমান প্রক্রিয়াটিতে একটি ডিবাগার সংযুক্ত করার প্রয়োজন। এই উত্তরটি দেখুন: unix.stackexchange.com/a/70636 - Kal


অন্যরা যেমন লিনাক্সে উল্লেখ করেছেন, আপনি / proc তে দেখতে পারেন তবে আপনার কার্নেল সংস্করণের উপর নির্ভর করে এক বা দুটি সীমা রয়েছে:

সর্বপ্রথম, পরিবেশের প্রক্রিয়াটি যখন উদ্ভূত হয় তখন এনভায়রনমেন্টের পরিবেশে পরিবেশ রয়েছে। এর মানে হল যে তার পরিবেশে প্রক্রিয়াটি যে কোন পরিবর্তন করতে পারে তা / proc তে দৃশ্যমান হবে না:

$ cat /proc/$$/environ | wc -c
320
$ bash
$ cat /proc/$$/environ | wc -c
1270
$ 

প্রথম শেলটি একটি লগইন শেল এবং প্রাথমিকভাবে খুব সীমিত পরিবেশ রয়েছে তবে এটি উত্সর্গ করে এটি বৃদ্ধি করে। .bashrc কিন্তু / proc এই প্রতিফলন করে না। দ্বিতীয় শেল শুরু থেকে বড় পরিবেশ উত্তরাধিকার সূচিত করে, এটি কেন এটি / proc তে দেখায়।

এছাড়াও, পুরোনো কার্নেলগুলিতে, পরিবেশ ফাইলের সামগ্রীগুলি পৃষ্ঠার আকারের সীমিত (4K):

$ cat /proc/$$/environ | wc -c
4096
$ env | wc -c
10343
$ 

কোথাও 2.6.9 (RHEL4) এবং 2.6.18 (RHEL5) এর মধ্যে এই সীমাটি সরানো হয়েছে ...


24
2017-10-29 11:27



প্রক্রিয়াটি উত্থাপিত হওয়ার পরে সেট করা একটি দূরবর্তী প্রক্রিয়াটির পরিবেশগত পরিবর্তনগুলি কি সম্ভব? আমি বুঝতে পারি যে ভিএফএস-এ, এটি / proc / self / পরিবেশের সাথে দেখানো হয় তবে আমরা যদি প্রক্রিয়াটির ভিতরে থাকি। কিন্তু একটি দূরবর্তী প্রক্রিয়া জন্য এই পেতে কিভাবে? - GP92


এটি করার জন্য বিএসডি বিকল্পগুলির সঠিক ব্যবহার (অন্তত লিনাক্সে):

ps e $pid

অথবা

ps auxe  #for all processes

এবং হ্যাঁ, ps manpage বেশ বিভ্রান্তিকর। (মাধ্যমে)


10
2018-03-04 12:15



আমার উবুন্টু কমান্ড লাইনের বিপরীতে পরিবেশের ভেরিয়েবলগুলিকে ধাক্কা দেয়, এমনকি তাদের মধ্যে একটি স্থান ছাড়াও, এবং টার্মিনাল উইন্ডোতে একটি লাইনেও টুকরো টুকরো করে। আমি খুঁজে পেয়েছি ps eww $pid দ্বিতীয় সমস্যা সংশোধন করে। - user18911
@ user18911: env vars একটি অক্ষর বিভাজক বিভাজক আছে। এই পৃষ্ঠায় অন্যান্য উত্তর ব্যবহার করার উপায় প্রদর্শন xargs অথবা tr পঠনযোগ্যতার জন্য এই নতুন রূপান্তর করতে। আপনি সম্ভবত হস্তক্ষেপ চার বছর এই উপলব্ধি। - Jonathan Hartley


cat /proc/PID/environ

আপনি যে প্রক্রিয়াটি দেখতে চান তার PID দিয়ে PID প্রতিস্থাপন করুন। একটি চলমান প্রক্রিয়া সম্পর্কে প্রতিটি তথ্য / proc / PID / ডিরেক্টরি অধীনে

উদাহরণ: বিড়াল / proc / 32512 / পরিবেশ


7
2017-09-17 18:19





লিনাক্সের নিচে, আমি একটি চেহারা করার চেষ্টা করব

/proc/<pid>/environ

6
2017-09-17 18:19





থেকে নেওয়া আর্চলিন্স উইকি:

আপনি মান বিশ্লেষণ করতে একটি অস্থায়ী ফাংশন তৈরি করতে পারেন /proc/<pid>/environ। টার্মিনাল প্রম্পটে:

envof() { sed 's/\x0/\n/g' /proc/${1}/environ; }

তারপরে আপনি যে প্রক্রিয়াটি চান তা পিনের সাথে ব্যবহার করুন:

envof <pid>

6
2018-01-13 23:05





Solaris 5.10 জন্য, এই কাজ করে:

pargs -e <PID>

4
2017-08-08 10:04