आपको प्रति-थ्रेड और प्रति-प्रक्रिया सेटिंग के बीच अंतर करना होगा।
prctl (PR_SET_NAME, ...) प्रति-थ्रेड आधार पर नाम (16 बाइट्स तक) सेट करता है, और आप सी स्विच के साथ उस नाम को दिखाने के लिए "ps" को मजबूर कर सकते हैं (उदाहरण के लिए पीएस एचसीएक्स)। आप शीर्ष पर सी स्विच के साथ ऐसा ही कर सकते हैं, इसलिए मुझे लगता है कि htop की समान कार्यक्षमता है।
क्या "पीएस" सामान्य रूप से आपको दिखाता है (उदाहरण के लिए पीएस हैक्स) कमांड लाइन नाम और तर्क है जिसके साथ आपने अपना प्रोग्राम शुरू किया (वास्तव में क्या/proc/pID/cmdline आपको बताता है), और आप सीधे संशोधित करके संशोधित कर सकते हैं argv [0] (इसकी मूल लंबाई तक), लेकिन यह एक प्रति-प्रक्रिया सेटिंग है, जिसका अर्थ है कि आप अलग-अलग धागे को अलग-अलग नाम नहीं दे सकते हैं।
के बाद कोड है मैं सामान्य रूप से एक पूरे के रूप प्रक्रिया नाम बदलने के लिए उपयोग करें:
// procname is the new process name
char *procname = "new process name";
// Then let's directly modify the arguments
// This needs a pointer to the original arvg, as passed to main(),
// and is limited to the length of the original argv[0]
size_t argv0_len = strlen(argv[0]);
size_t procname_len = strlen(procname);
size_t max_procname_len = (argv0_len > procname_len) ? (procname_len) : (argv0_len);
// Copy the maximum
strncpy(argv[0], procname, max_procname_len);
// Clear out the rest (yes, this is needed, or the remaining part of the old
// process name will still show up in ps)
memset(&argv[0][max_procname_len], '\0', argv0_len - max_procname_len);
// Clear the other passed arguments, optional
// Needs to know argv and argc as passed to main()
//for (size_t i = 1; i < argc; i++) {
// memset(argv[i], '\0', strlen(argv[i]));
//}
सबमिटर प्रति-धागा की स्थापना के लिए पूछ रहा था, नहीं? –
आप अपने आप को argv [0] की लंबाई तक सीमित क्यों करते हैं? – user2815333