سؤال متغيرات البيئة لعملية تشغيل على يونكس؟


أحتاج إلى استكشاف بعض المشكلات المتعلقة بمتغيرات البيئة وإصلاحها على نظام Unix.

في Windows ، يمكنني استخدام أداة مثل ProcessExplorer لتحديد عملية وعرض قيم لكل متغير بيئة.

كيف يمكنني تحقيق نفس الشئ على يونكس؟ echoing و env يعرض cmd فقط القيم في الوقت الحالي ، ولكن أريد عرض القيم التي تستخدمها عملية التشغيل حاليًا.


203
2017-09-17 18:14


الأصل


على الرغم من أن / proc / <pid> / environ لها حجم 0 ، فلا تزال هناك معلومات. "من المنطقي أن تفكر في ذلك كنافذة في النواة. لا يحتوي الملف على أي بيانات فعلاً ؛ بل يعمل فقط كمؤشر على مكان وجود معلومات العملية الفعلية." [مصدر] - nevets1219


الأجوبة:


cat /proc/<pid>/environ

إذا كنت ترغب في استخدام pid (s) من تشغيل قابل للتنفيذ ، يمكنك استخدام عدد من الاحتمالات الأخرى 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
أنا لا أفهم لماذا استخدام xargs لتحويل الأصفار إلى الخطوط الجديدة أفضل من استخدام tr. يمكن للشخص أن يضعها لي؟ شكر. - Jonathan Hartley


لأن هذا السؤال لديه يونيكس العلامة والجميع قاموا بمثل هذه المهمة الرائعة لينكس ، يمكنك الحصول على هذه المعلومات على OS X وغيرها من الأنظمة المشتقة من BSD باستخدام

ps -p <PID> -wwwe

أو

ps -p <PID> -wwwE

وعلى سولاريس مع

/usr/ucb/ps -wwwe <PID>

سولاريس يدعم أيضا /proc دليل إذا كنت لا تريد أن تتذكر غامضة ps commmand.


52
2017-09-17 20:47



أنا أركض ps -p <PID> -wwwe على OS X 10.6 أحصل على قائمة بجميع العمليات الجارية. الأمر الصحيح مع -E العلم ، لا -E. - drAlberT
اختبرت على OS X 10.4 ، ولكن ليس 10.5. تحديث وفقا لذلك. - Gerald Combs
هذا ليس مثالي. الخيار -E فقط تقارير مبدئي متغيرات البيئة. إذا تم تغيير المتغيرات من خلال عملية التشغيل نفسها (على سبيل المثال من خلال استخدام وظيفة POSIX putenv ()) ، لا تنعكس التغييرات في مخرجات ps -p <PID> -wwE. - Kal
لا يبدو أن مشاهدة env vars للعمليات التي لا تملكها يبدو ميزة مرغوبة. كما الحال بالنسبة لـ @ drAlberT في إجابة لينوكس الموجهة /proc/PID/environ. هذه الملفات قابلة للقراءة فقط من قبل مالك العملية. - Jonathan Hartley
yani إنه ممكن ، لكنه أصعب بكثير ، فهو يتطلب إرفاق مصحح أخطاء بعملية التشغيل. انظر هذا الجواب: unix.stackexchange.com/a/70636 - Kal


كما ذكر آخرون ، في لينكس ، يمكنك البحث في / proc ، ولكن هناك ، بحسب إصدار النواة ، حد واحد أو حدين:

أولاً ، يحتوي ملف environ على البيئة كما بدا عندما تم إنتاج العملية. وهذا يعني أن أي تغييرات قد تكون العملية قد أدخلت على بيئتها لن تكون مرئية في / proc:

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

يعتبر الغلاف الأول عبارة عن قذيفة تسجيل دخول ، ويتمتع في بادئ الأمر ببيئة محدودة للغاية ، ولكنه ينمو من خلال مصادر مثل: .bashrc لكن / proc لا يعكس هذا. ترث القشرة الثانية البيئة الأكبر من البداية ، ولهذا السبب تظهر في / proc.

أيضًا ، في النواة القديمة ، تقتصر محتويات ملف environ على حجم الصفحة (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



هل من الممكن الحصول على المتغيرات البيئية للعملية البعيدة التي تم تعيينها بعد أن يتم إنتاج العملية؟ أنا أفهم أنه على VFS ، أظهر مع / proc / self / environ ولكن فقط إذا كنا داخل العملية. ولكن كيف يمكن الحصول على هذه العملية عن بعد؟ - GP92


الاستخدام الصحيح لخيارات BSD للقيام بذلك (على الأقل على نظام لينكس):

ps e $pid

أو

ps auxe  #for all processes

ونعم ، ps manpage مربكة جدا. (بواسطة)


10
2018-03-04 12:15



يقوم Ubuntu بتحطيم متغيرات البيئة مباشرة أمام سطر الأوامر ، بدون حتى وجود مسافة بينها ، كما يتم اقتطاعها إلى سطر واحد على النافذة الطرفية. وجدت ps eww $pid يصلح المشكلة الثانية. - user18911
@ user18911: تحتوي env vars على فاصل حروف فارغ. تعرض الإجابات الأخرى في هذه الصفحة طرق الاستخدام xargs أو tr لتحويل هذه إلى خطوط جديدة للقراءة. ربما أدركت هذا في السنوات الأربع المتداخلة. - Jonathan Hartley


cat /proc/PID/environ

استبدال PID بمعرف PID للعملية التي تريد رؤيتها. كل المعلومات حول عملية قيد التشغيل هي تحت / proc / PID / الدليل

مثال: cat / proc / 32512 / environ


7
2017-09-17 18:19





تحت لينكس ، كنت أحاول إلقاء نظرة على

/proc/<pid>/environ

6
2017-09-17 18:19





مأخوذة من Archlinux wiki:

يمكنك إنشاء دالة مؤقتة لتحليل القيم في /proc/<pid>/environ. في موجه المحطة الطرفية:

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

ثم باستخدام pid للعملية التي تريدها ، استخدم فقط:

envof <pid>

6
2018-01-13 23:05





بالنسبة لـ Solaris 5.10 ، يعمل هذا:

pargs -e <PID>

4
2017-08-08 10:04





وبما أن وظيفتي تجعلني فتى معجب بـ AIX ، دعونا لا ننسى:

ps eww [pid]

أو كما تسميها صفحة الرجل ، "معايير بيركلي".

لأي سبب من الأسباب ، / proc / PID / environ غير موجود في AIX.


3
2018-01-19 15:03