किसी चल रही प्रक्रिया का पुनर्निर्देशन देखें


17

अगर मैं इस कमांड के साथ एक ऐप शुरू करता हूं:

/path/to/my/command >> /var/log/command.log

और कमांड वापस नहीं आती है, क्या एक रास्ता है, एक और संकेत से, यह देखने के लिए कि क्या एसटीडी के बारे में रीडायरेक्ट सेट है?

मैं किसी चीज की तलाश में हूं

cat /proc/PID/redirects

या

ps -??? | grep PID

लेकिन कोई भी तरीका अपनाएगा।

जवाबों:


22

फ़ाइल डिस्क्रिप्टर # 1 (STDOUT) की जाँच करें /proc/$PID/fd/। कर्नेल इस फाइल को एक फाइल के प्रतीकात्मक लिंक के रूप में प्रदर्शित करता है, जो डिस्क्रिप्टर को रीडायरेक्ट किया जाता है।

$ readlink -f /proc/20361/fd/1
/tmp/file

उत्तम! धन्यवाद! क्या आप अन्य रीडायरेक्ट जैसे कि STDERR, यानी वे कौन से नंबर हैं, के बारे में एक लिंक या विवरण प्रदान कर सकते हैं?
रिच

कम से कम लिनक्स पर (और मुझे लगता है कि हर दूसरे ज्ञात यूनिक्स-जैसे ओएस पर) वे 0 हैं: स्टडिन, 1: स्टडआउट, 2: स्टडर (मानक त्रुटि)। नोट <stdio.h>: STD {IN, OUT, ERR} _FILOO में परिभाषित C मैक्रोज़ भी हैं। विवरण के लिए 'मैन स्टडआउट' देखें।
पेट्र उज़ेल

स्टड के लिए 0, 1, 2, stdout और stderr क्रमशः सभी यूनिक्स / यूनिक्स जैसी प्रणालियों में गारंटी हैं, और विंडोज पर भी सही हैं।
पॉल स्टेलियन

MacOS पर ऐसा करने का कोई तरीका? / proc / <pid> / fd / 1 मौजूद नहीं है, शायद मैं mkfifo का उपयोग कर सकता हूं?
अलेक्जेंडर मिल्स

4

एक उपयोगी उपकरण यह देखने के लिए कि क्या प्रक्रियाएं हैं जो फाइलें खोलती हैं lsof। आप इसे एक विशिष्ट प्रक्रिया के साथ इंगित कर सकते हैं lsof -p1234, और आपको ज्यादातर वही जानकारी दिखाई देगी जो आप ls -l /proc/1234/fdलिनक्स के तहत प्राप्त कर सकते हैं , अर्थात क्या फाइलें खोली जाती हैं।

सबसे उपयोगी चीज lsofदूसरे रास्ते से जा रही है: lsof /path/to/fileआपको बताती है कि उस फाइल का उपयोग कौन सी प्रक्रियाएं कर रही हैं।


1

बहुत सारे उत्तर इस प्रकार करते हैं:

tail -f /proc/{PID}/fd/1

हालाँकि, मैंने पाया है कि यह हमेशा काम नहीं करता है। वैकल्पिक रूप से, catकभी-कभी पैदावार होती है।

cat /proc/{PID}/fd/1

जहाँ {PID} को ps auxकमांड का उपयोग करके देखा जा सकता है ।

उल्लेख करने के लिए भी अच्छा है, यह है कि कमांड के अंत में संख्या (इस मामले में fd / 1) अन्य आउटपुट के लिए बदला जा सकता है।

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.