سؤال كيف يمكنني معرفة المسار المطلق لعملية قيد التشغيل؟


إذا كان لدي نسخ متعددة من نفس التطبيق على القرص ، وكان هناك واحد فقط قيد التشغيل ، كما يمكنني رؤيته psكيف يمكنني معرفة مطلق الطريق لتمييزه عن الآخرين؟


80
2018-02-01 13:48


الأصل




الأجوبة:


% sudo ls -l /proc/PID/exe

على سبيل المثال:

٪ ps -auxwe | grep 24466
root 24466 0.0 0.0 1476 280؟ S 2009 0:00 الإشراف على sshd
٪ sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 root root 0 Feb 1 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise

93
2018-02-01 17:04



في نظامي (أوبونتو 14.04) لا يجب أن تكون مستخدمًا متميزًا لتشغيل ls أمر. - jarno
jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied - ليس حول تشغيل ls الأمر ، يتعلق الأمر بالوصول إلى معلومات العملية الخاصة بعملية لا تنتمي إليك. على بلدي مربع ، حوالي 97 ٪ من جميع العمليات المذكورة في / proc هي عمليات الجذر ، ويتم توزيع الآخرين على 11 مستخدمين مختلفين. - Irfy


استعمال:

pwdx $pid

هذا يمنحك دليل العمل الحالي للمنتج ، وليس مسارها المطلق.

عادة which سيخبرك الأمر الذي يتم استدعاؤه من shell:

#> which vlc
/usr/bin/vlc

13
2018-05-03 06:48



هذه الإجابة تحتاج إلى المزيد من التفاؤل .. - Kokizzu
Kokizzu لا ، لا لأنه لا يجيب على السؤال على الإطلاق. الأمر الوحيد الذي يخبرك أي ثنائي سيتم تشغيله إذا قمت بتنفيذ الأمر الآن. كان السؤال "أي ثنائي يعمل بالفعل هناك". تخيل على سبيل المثال وجود اثنا عشر من jdks على جهاز الكمبيوتر الخاص بك. إذا كنت تريد أن تعرف لعملية جافا الجارية التي تم أخذها من jdk ، والتي لا تساعدك في ذلك. سوف يخبرك فقط أي jdk سيتم أخذه من ، إذا قمت بتنفيذه الآن. الإجابة المقبولة هي الإجابة الصحيحة. - noamik
طريقة بديهية لهذه الإجابة خاطئة: على جهازي أقوم بتشغيل عمليات بإصدارات مختلفة من JDK وبعض 32bits / 64bits. إذا كنت أرغب في تحديد إصدار jstack / jmap الصحيح للعملية ، فلن تعمل الإجابة أعلاه بينما ستحصل الإجابة المقبولة. - Daniel Da Cunha
Kokizzu هذا فقط يجيب على السؤال ، "ما هو دليل العمل الحالي للعملية $pid"لم تنجح المشاركة المحرّرة في الإجابة عن السؤال. which يخبر فقط "إذا كان الأمر في المسار ، فما هو؟" - John Strood


طريقة واحدة هي ps -ef


12
2018-02-01 13:58



لم يعمل في خدمة معينة ، وإنما يوفر فقط المسار النسبي - Jader Dias
ساعدني في تحديد عملية عبر الأمر الذي بدأ به. - jpierson


ps auxwwwe

مصدر:

https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output


5
2018-02-01 13:53



لا تظهر جميع المسارات المؤهلة الكاملة على بلدي لينكس: "الجذر 24466 0.0 0.0 1476 280؟ S 2009 0:00 الإشراف على sshd" على سبيل المثال - akira
هذا أكثر دقة من الإجابات الأخرى ... ربما ليس مفيدًا ، ولكنه أكثر الإجابة الصحيحة. Upvoted. - John Hunt


الجواب السريع هو استخدام ps مع خيارات أو /proc معلومات نظام الملفات. ذلك سوف عادة العمل ، ولكن ليست مضمونة. بشكل عام ، لا توجد إجابة محددة ومضمونة. على سبيل المثال ، ماذا لو تم حذف ملف التنفيذ أثناء التنفيذ ، بحيث لا يوجد مسار للملف؟

نرى الأسئلة الشائعة حول Unix لمزيد من التفاصيل ، لا سيما السؤالين 4.3 و 4.4.


2
2018-02-01 14:45





لماذا يتوقع الجميع منك معرفة PID؟ وإليك الطريقة الصديقة للإنسان:

pwdx `pgrep ###process_name###`

2
2018-04-27 23:28



يوضح السؤال "كما أراه ps"، لذا من المحتمل أن تعرض PID - Scz
آه حسنا صحيح. ما زلت أجد هذا ليكون بطانة أسرع في العديد من حالات الاستخدام الخاصة بي. - moodboom


يمكنك استخدام

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

أو

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

للحصول على المسار المطلق. PID هي العملية.


0
2018-03-05 11:35