लिनक्स: कैसे पता करें कि एक प्रक्रिया कहाँ शुरू की गई थी और कैसे शुरू की गई थी?


33

मैं एक लिनक्स बॉक्स की जाँच कर रहा था और एक पर्ल प्रक्रिया को चला रहा था और सीपीयू के उपयोग का एक अच्छा हिस्सा ले रहा था। शीर्ष के साथ, मैं केवल प्रक्रिया के नाम पर ही जा सकता था।

जब मैंने c दबाया , कमांड-लाइन देखने के लिए, यह दिखाया गया / var / स्पूल / मेल। जिसका कोई मतलब नहीं है, क्योंकि यह निर्देशिका है।

मेरे प्रश्न हैं:

1) ऐसा क्यों हुआ? कैसे यह पर्ल प्रक्रिया इसकी कमांड-लाइन को मुखौटा बना सकती है? 2) यह पता लगाने का सबसे विश्वसनीय तरीका क्या है कि एक प्रक्रिया कहाँ और कैसे शुरू की गई थी?

धन्यवाद!

जवाबों:


36

ज्यादातर मामलों में सिर्फ रनिंग psआमतौर पर पर्याप्त है, साथ ही अपने पसंदीदा झंडे के साथ विस्तृत आउटपुट को सक्षम करने के लिए। मैं ओर झुकता हूं ps -feww, लेकिन यहां अन्य सुझाव काम करेंगे। ध्यान दें कि यदि कोई कार्यक्रम किसी के द्वारा शुरू किया गया था $PATH, तो आप केवल निष्पादन योग्य नाम देख सकते हैं, पूर्ण पथ नहीं। उदाहरण के लिए, इसे आज़माएँ:

$ lftp &
$ ps -feww | grep ftp
lars      9600  9504  0 11:30 pts/10   00:00:00 lftp
lars      9620  9504  0 11:31 pts/10   00:00:00 grep ftp

यह ध्यान रखना महत्वपूर्ण है कि दिखाई देने वाली जानकारी psको चल रहे कार्यक्रम द्वारा पूरी तरह से अधिलेखित किया जा सकता है। उदाहरण के लिए, यह कोड:

int main (int argc, char **argv) {
        memset(argv[0], ' ', strlen(argv[0]));
        strcpy(argv[0], "foobar");
        sleep(30);
        return(0);
}

अगर मैं इसे "myprogram" नामक फ़ाइल में संकलित करता हूं और इसे चलाता हूं:

$ gcc -o myprogram myprogram.c
$ ./myprogram &
[1] 10201

और फिर चलाएं ps, मुझे एक अलग प्रक्रिया नाम दिखाई देगा:

$ ps -f -p 10201
UID        PID  PPID  C STIME TTY          TIME CMD
lars     10201  9734  0 11:37 pts/10   00:00:00 foobar

आप सीधे भी देख सकते हैं /proc/<pid>/exe, जो उपयुक्त निष्पादन योग्य के लिए एक सहिष्णुता हो सकती है। उपरोक्त उदाहरण में, यह आपको अधिक उपयोगी जानकारी देता है ps:

$ls -l /proc/9600/exe
lrwxrwxrwx. 1 lars lars 0 Feb  8 11:31 /proc/9600/exe -> /usr/bin/lftp

1
सभी, सभी में, फ़ाइलें /procएक कार्यक्रम के बारे में सभी जानकारी प्रदान करेंगी, exeनिष्पादन योग्य के लिए एक लिंक होगी, cwdवर्तमान कार्यशील निर्देशिका के लिए, fdनिर्देशिका में खुली फ़ाइलों (मानक इनपुट, आउटपुट और मानक त्रुटि सहित) के लिंक शामिल हैं
ह्यूबर्ट करियो

57

सबसे विश्वसनीय तरीका /procप्रक्रिया के लिए डायर को देखना है। प्रत्येक प्रक्रिया में एक /proc/<pid>/निर्देशिका होती है जहाँ वह जानकारी रखती है जैसे:

  1. cwd वर्तमान कार्य निर्देशिका से लिंक करें
  2. fd खुली फाइलों के लिंक के साथ एक डायर (फाइल डिस्क्रिप्टर)
  3. cmdline यह देखने के लिए पढ़ें कि प्रक्रिया शुरू करने के लिए कमांड लाइन का क्या उपयोग किया गया था
  4. environ उस प्रक्रिया के लिए पर्यावरण चर
  5. root इस प्रक्रिया के बारे में क्या विचार है कि यह रूट डिर है (यह तब तक / जब तक उसे काट न दिया जाए)

प्रत्येक प्रक्रिया / खरीद के बारे में अधिक अच्छी जानकारी है, लेकिन ऊपर वालों के साथ आप ठीक से जान पाएंगे कि क्या चल रहा है।

इसके अलावा, उपयोग करने से ps auxfआपको पता चलेगा कि किसने कांटा लगाया ताकि आपको एक बेहतर विचार मिल सके, जो आपके लिए कॉल कर रहा हो।


मैं हमेशा विंडोज पर प्रोसेस एक्सप्लोरर का उपयोग करता हूं और सोचता हूं कि क्या लिनक्स पर एक समान था। वह स्विच यह सब करता है! ps auxf ... अच्छा!
यानिक गिरौद

1
पी के लिए एफ पैरामीटर के लिए +1, यह मेरे लिए था!
लेनरट रोलैंड

2
+1 मुझे सिखाने के लिए जो इस तरह की मौलिक अवधारणा की तरह लगता है ... /procजिसमें प्रक्रिया की जानकारी होती है! कौन जानता था?? सभी मैं कभी भी वहाँ के लिए देखा था versionऔर cpuinfoसामान ... प्लस यह मेरी वास्तविक समस्या हल करती है क्योंकि मेरे राउटर के संस्करण में सभी मापदंडों को अनदेखा करता है
Nacht -

@ कॉर्डम्प: और यदि प्रक्रिया को chroot()पहले बुलाया जाता है , तो मैं यह कैसे जान सकता हूं कि कौन सी डायरेक्टरी किससे /proc/ᴘɪᴅ/cwdमेल खाती है?
user2284570

10

मेरे लिए, अभी-अभी, मैंने पाया कि pstreeबहुत स्पष्ट संकेत दिया कि कैसे एक प्रक्रिया शुरू की गई थी, की तुलना मेंps aux

यह इस तरह दिख रहा है:

  ├─lightdm─┬─Xorg
  │         ├─lightdm─┬─init─┬─apache2───2*[apache2───26*[{apache2}]]
  │         │         │      ├─at-spi-bus-laun─┬─dbus-daemon
  │         │         │      │                 └─3*[{at-spi-bus-laun}]
  │         │         │      ├─at-spi2-registr───{at-spi2-registr}
  │         │         │      ├─dbus-daemon
  │         │         │      ├─dropbox───29*[{dropbox} ]

2

ps axww | grep perlअपनी प्रक्रिया की पूरी कमांड लाइन प्राप्त करने का प्रयास करें । ऐसा लगता है कि topबस एक लंबी लाइन छंटनी की है।


2

कमांड का उपयोग करने का प्रयास करें fuser -vu /var/spool/mail यह कमांड आपको निर्दिष्ट फ़ाइलों या फ़ाइल सिस्टम का उपयोग करके प्रक्रियाओं के पीआईडी ​​प्रदर्शित करेगा। डिफ़ॉल्ट प्रदर्शन मोड में, प्रत्येक फ़ाइल का नाम एक पत्र द्वारा पहुंच के प्रकार को दर्शाता है:

सी - वर्तमान निर्देशिका। ई - निष्पादन योग्य चलाया जा रहा है। f - खुली हुई फाइल। f डिफॉल्ट डिस्प्ले मोड में छोड़ा गया है। आर - रूट निर्देशिका। m - mmap'ed फ़ाइल या साझा लाइब्रेरी।

हो सकता है कि यह आपको उत्तर देने में आपकी खोज को आगे बढ़ाने में मदद करे जो आप खोज रहे हैं। मुझे नहीं पता कि यह आपकी मदद करता है लेकिन शायद आपको कुछ उपयोगी जानकारी मिलेगी।


1

वाईटआउट सटीक झंडे के लिए मैन पेज से परामर्श करना, कमांड लाइन और स्टार्ट टाइम क्या है, यह समझने के लिए एक आसान तरीका है, ps auxwww काम करेगा। आप इसे और अधिक सुरुचिपूर्ण बना सकते हैं यदि आप मैन पेज को पढ़कर वांछित हैं।


1

दो आदेश वसंत के लिए:

1) ' पीएस ' से बाहर की प्रक्रिया के लिए शुरुआती समय प्राप्त करें ।

$ ps -ax -o pid,start,comm
  PID  STARTED COMMAND         USER
    1   Feb 06 init            root
    2   Feb 06 kthreadd        root
[...]
  13147 19:09:48 chrome          hcooper
  13270 19:13:51 chrome          hcooper
  13386 19:18:34 bash            hcooper

2) lastcomm , जो अब मैं देखता हूं, मैंने इंस्टॉल नहीं किया है। किसी भी तरह आदमी पृष्ठ विवरण कहते हैं:

   lastcomm prints out information about previously executed commands. If
   no arguments are specified, lastcomm will print info about all of the
   commands in acct (the record file).

लेकिन जैसा कि कुछ लोगों ने कहा है, "ls -al / proc /" आपको बहुत कुछ बताएगा!


0

आप उपयोग कर सकते हैं:

systemctl status <PID>

या प्रक्रिया के नाम के साथ:

systemctl status $(pgrep perl)

यह आपकी प्रक्रिया शुरू करने वाली systemd सेवाओं की जानकारी देगा।

मुझे यह संकेत यहां मिला

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.