سؤال

على لينكس/NPTL, ، يتم إنشاء الخيوط كنوع من العمليات.

أستطيع أن أرى أن بعض عملياتي تحتوي على cmdline غريب:

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec)

هل لديك فكرة عن كيفية القيام بذلك لكل موضوع من عملي؟سيكون ذلك مفيدًا جدًا لتصحيح الأخطاء.

/ أنا الآن أقوم بالتحقيق في مصدر HAL

شكرًا

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

المحلول

إذا كنت تريد القيام بذلك بطريقة محمولة، وهو أمر سيعمل عبر العديد من إصدارات Unix، فهناك عدد قليل جدًا من الخيارات المتاحة.

ما عليك فعله هو أن عملية المتصل الخاصة بك يجب أن تتصل بـ exec مع ملف argv [0] وسيطة تشير إلى الاسم الذي ترغب في رؤيته في مخرجات العملية، واسم الملف الذي يشير إلى الملف القابل للتنفيذ الفعلي.

يمكنك تجربة هذا السلوك من Shell باستخدام:

exec -a "This is my cute name" bash

سيؤدي ذلك إلى استبدال عملية bash الحالية بعملية مسماة "This is my cute name".

للقيام بذلك في لغة C، يمكنك إلقاء نظرة على الكود المصدري لـ sendmail أو أي برنامج آخر تم نقله على نطاق واسع والعثور على جميع الاختلافات المطلوبة عبر أنظمة التشغيل لدعم ذلك.

تحتوي بعض أنظمة التشغيل على setproctitle(3) API، والبعض الآخر يسمح لك بتجاوز محتويات argv [0] وتظهر تلك النتيجة.

نصائح أخرى

argv يشير إلى سلاسل قابلة للكتابة.فقط اكتب لهم أشياء:

#include <string.h>
#include <unistd.h>

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}

باه..الكود ليس لطيفًا، الحيلة هي إعادة استخدام مؤشر البيئة (هنا argv_buffer):

memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;

أي فكرة أفضل؟

هل هذا يعمل لمواضيع مختلفة؟

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