سؤال

أحاول تحديد وقت تشغيل عملية معينة ، استنادًا إلى وسيطاتها ، على Mac OS X. قد تكون هناك العديد من العمليات التي تعمل بنفس الاسم ، ولكن واحدة فقط ستحصل على الوسائط التي أبحث عنها. العمليات ليست مملوكة للمستخدم نفسه الذي سيقوم بتشغيل الكود الخاص بي. لن يكونوا قد قاموا بتعديل ARGV بأي شكل من الأشكال.

يُظهر أمر "PS" المعلومات التي أحتاجها بالضبط. لكنني أفضل عدم الاضطرار إلى تفرخ "PS" وتحليل إنتاجه.

لقد جربت الحل في الأصل من هذا السؤال, ، باستخدام SYSCTL ، ولكن اتضح أن هذا يعمل فقط للعمليات التي تملكها ؛ يرى سؤالي الآخر لمزيد من المعلومات.

فكيف يحصل PS على معلومات ArgV للعمليات التي يملكها مستخدمون آخرين؟

هل كانت مفيدة؟

المحلول

على Mac OS X PS هو setuid 0 ، وهو ما يحصل على المعلومات لجميع العمليات. يجب أن تعمل كجذر للحصول على هذه المعلومات ، لذلك إما أنك تحتاج إلى أن تكون setuid 0 أو تشغيل فائدةك مع Sudo.

أفضل طريقة على الأرجح هي فقط أن تفرخ PS وتحليل الإخراج ، حتى لو كنت لا تريد حقًا ؛)

نصائح أخرى

BSD ps (يستخدم في Mac OS X) الاستخدامات kvm_getargv() للحصول على وسيطات سطر الأوامر لعملية ما.

ها هي المكالمة الفعلية: رمز المصدر PS. البحث عن kvm_getproc2.

يرى صفحة OpenBsd Man لهذه العائلة من الوظائف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top