जीएनयू / लिनक्स में एक विशिष्ट नाम एक प्रक्रिया दे रहा है?


10

मैं एक प्रक्रिया कैसे शुरू कर सकता हूं ताकि यह psकमांड में एक विशिष्ट पहचानकर्ता हो ?

UPD : मेरे पास एक बॉक्स पर चलने वाले कुछ सर्वर हैं। उनमें से ज्यादातर तैनाती मोड में हैं। हालांकि एक विकास में है। सभी सर्वर पाइथोनिक हैं और बीमारी यह है कि सभी सर्वरों को इसमें सूचीबद्ध किया pythonगया है ps, जो killallविकास में किसी एक को असंभव बना देता है।

UPD : जैसा कि डेविड और जीएनयूइक्स ने सुझाव दिया था कि मैंने पायथन इंटरप्रेटर के प्रति सहानुभूति पैदा की और प्रत्येक सर्वर के लिए स्क्रिप्ट्स को बैश किया।

जवाबों:


7

सिम्कलिंक बनाना ट्रिक को करना चाहिए, हालांकि, यह अधिक उपयोगी होगा यदि हम बीमारी को जानते हैं और लक्षण नहीं। वास्तव में आप क्या करने की कोशिश कर रहे हैं? क्योंकि एक बेहतर तरीका हो सकता है

gnuix@defiant)-(08:11pm-:-06/10)--
(~)./0012
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14020 pts/1    00:00:00 0012
14021 pts/1    00:00:00 ps
(gnuix@defiant)-(08:11pm-:-06/10)--
(~)ln -s 0012 weird
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)./weird 
my weird program name
  PID TTY          TIME CMD
 7805 pts/1    00:00:00 zsh
14046 pts/1    00:00:00 weird
14047 pts/1    00:00:00 ps
(gnuix@defiant)-(08:12pm-:-06/10)--
(~)

अपडेट: आपके द्वारा की जा रही अतिरिक्त जानकारी के आधार पर (मुझे यकीन है कि एक आसान तरीका है, लेकिन इस समय मेरे पास नहीं आ रहा है) आपके सर्वर ने स्टार्टअप पर एक फ़ाइल के लिए अपना पीआईडी ​​लिख दिया है, तो आप मार सकते हैं -9 | cat /var/run/devserver.pid लेकिन फिर वह एक प्रोग्रामिंग प्रश्न होगा :)

फिर से अपडेट करें: आप सर्वर के पीआईडी ​​प्राप्त करने के लिए कुछ शेल ट्रिकरी भी कर सकते हैं जब आप उन्हें लॉन्च करते हैं, तो मेरे सिर के ऊपर से आप एक शेल फ़ंक्शन बना सकते हैं जिसे स्टार्टरसेवर कहा जाता है उदाहरण के लिए जो कमांड का उपयोग आप अपने सर्वर को शुरू करने के लिए करेंगे। $ पर भी कब्जा! स्टार्टअप नाम के आधार पर एक फ़ाइल के लिए - फिर हम शेल स्क्रिप्टिंग के बारे में बात कर रहे हैं जो 'इनबाउंड' @ सर्वरफॉल्ट है। :-)


4

आप उस बाइनरी का नाम बदल सकते हैं जिसे आप चलाने जा रहे हैं। आप केवल बाइनरी के लिए एक सिमलिंक का उपयोग करके दूर हो सकते हैं।

यदि आप वास्तव में नाम बदलना चाहते हैं, तो सबसे अच्छा तरीका एक साधारण आवरण का उपयोग करना है जो argv सेट करता है और फिर उस प्रक्रिया को निष्पादित करता है जिसे आप चलाना चाहते हैं। अब आपके पास कुछ उदाहरण कोड देने का समय नहीं है, लेकिन लगभग 10 घंटों में जोर से चिल्लाएं और मैं देखूंगा कि मैं क्या कर सकता हूं।


बिल्कुल मेरी बात आपको इसके लिए कोड की आवश्यकता है (बाइनरी का नाम बदलने (/ से हटकर) बाइनरी को जोड़ना जो समस्याग्रस्त हो सकता है अगर यह argv [0] की जांच करता है)
मार्टिन एम।

कुछ बायनेरिज़ अच्छी तरह से काम नहीं करेंगे यदि आप ज्यादातर एम्बेडेड (बिजीबॉक्स, ड्रॉपबियर) करते हैं
1

3

Https://github.com/electrum/procname को देखें । यह आपको किसी भी प्रक्रिया का नाम एरण्य चर का उपयोग करने की अनुमति देता है।

उपयोग:

Java को LD_PRELOAD और PROCNAME वातावरण चर सेट के साथ चलाएँ:

LD_PRELOAD = / path / to / libprocname.so PROCNAME = हैलो java -jar.oo.jar


2

यह वास्तव में एसओ पर नहीं है क्योंकि यह सामान्य है, न कि एक भाषा विशिष्ट प्रश्न।

संक्षिप्त उत्तर आसानी से नहीं है। यही है, यह आपके शेल या procfs / sysfs की कार्यक्षमता के भीतर से नहीं किया जा सकता है। इसे प्राप्त करने के लिए आपको बाहरी उपयोगिता का उपयोग करने की आवश्यकता होगी।

यहाँ कैसे और क्यों पर एक लंबा वर्णन है । खबरदार यह बहुत C- केंद्रित है।

अपडेट करें:

वे अजगर हैं जो खेल को बदलते हैं। अब बहुत ज्यादा एसओ होने के बिना, इस मॉड्यूल या इसी तरह के दृष्टिकोण का उपयोग करने के लिए उन्हें संशोधित करना आसान होगा ।


touche .. मुझे पता था कि एक आसान तरीका था :)
GNUix

C कोड आउटपुट की मात्रा के कारण इसे करने की आवश्यकता से काफी अधिक क्रिया है। इसे नीचे सिकोड़ना संभव होना चाहिए, लेकिन यह वही कर रहा है जैसा मैं सुझा रहा था। केवल इसके साथ जाने के लिए कुछ कोड के साथ :) यह गायब है बिट आपके कोड को चलाने के लिए निष्पादन है :)
डेविड पशले
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.