प्रक्रिया PS या सूचीबद्ध नहीं है / proc /


4

मैं यह पता लगाने की कोशिश कर रहा हूं कि एक बड़ा जावा प्रोग्राम 'प्रोग' कैसे संचालित किया जाए। अगर मैं इसके / बिन / डीआईआर पर जाता हूं और स्थानीय निर्देशिका और मेरे वर्तमान उपयोगकर्ता खाते का उपयोग करने के लिए इसके setenv.sh और prog.sh को कॉन्फ़िगर करता हूं। फिर मैं इसे "./prog.sh स्टार्ट" के माध्यम से चलाने की कोशिश करता हूं। यहाँ prog.sh के सभी प्रासंगिक बिट्स हैं:

USER=(my current account)
_CMD="/opt/jdk/bin/java -server -Xmx768m -classpath "${CLASSPATH}" -jar "${DIR}/prog.jar""
case "${ACTION}" in
    start)
        nohup su ${USER} -c "exec ${_CMD} >>${_LOGFILE} 2>&1" >/dev/null &
        echo $! >${_PID}
        echo "Prog running. PID="`cat ${_PID}`
        ;;
    stop)
        PID=`cat ${_PID} 2>/dev/null`
        echo "Shutting down prog: ${PID}
        kill -QUIT ${PID} 2>/dev/null
        kill ${PID} 2>/dev/null
        kill -KILL ${PID} 2>/dev/null
        rm -f ${_PID}
        echo "STOPPED `date`" >>${_LOGFILE}
        ;;

जब मैं वास्तव में ./prog.sh शुरू करता हूं, तो यह शुरू होता है। लेकिन मैं इसे प्रक्रिया सूची में बिल्कुल नहीं पा सकता हूं। न ही मैं इसे मैन्युअल रूप से मार सकता हूं, उसी कमांड का उपयोग करके शेल स्क्रिप्ट का उपयोग करता है। लेकिन मैं बता सकता हूं कि यह चल रहा है, क्योंकि अगर मैं करता हूं। /pro.sh रोकें, तो यह बंद हो जाता है (और कुछ अस्थायी फ़ाइलें कहीं और खुद को साफ करती हैं)।

./prog.sh start
Prog running. PID=1234
ps eaux | grep 1234
ps eaux | grep -i prog.jar
ps eaux >> pslist.txt
(It's not there either by PID or any clear name I can find: prog, java or jar.)
cd /proc/1234/
-bash: cd: /proc/1234/: No such file or directory
kill -QUIT 1234
kill 1234
kill -KILL 1234
-bash: kill: (1234) - No such process
./prog.sh stop
Shutting down prog: 1234

जहां तक ​​मैं बता सकता हूं, प्रक्रिया अभी तक किसी भी तरह से नहीं चल रही है जो सिस्टम द्वारा सूचीबद्ध है। मैं इसे ps या / proc / में नहीं ढूँढ सकता, और न ही मैं इसे मार सकता हूँ। लेकिन शेल स्क्रिप्ट अभी भी इसे ठीक से रोक सकती है। तो मेरा सवाल यह है कि ऐसा कैसे हो सकता है? क्या प्रक्रिया सर्वोच्च रूप से छिपी हुई है, वास्तव में असूचीबद्ध है, या क्या मैं इसे कुछ फैशन में याद कर रहा हूं? मैं यह पता लगाने की कोशिश कर रहा हूं कि यह कार्यक्रम क्या बनाता है, और मैं मुश्किल से साबित कर सकता हूं कि यह टिक गया है!

संपादित करें:

ps eu | grep prog.sh (after having restarted; so random PID)
50038    19381  0.0  0.0  4412  632 pts/3    S+   16:09   0:00 grep prog.sh HOSTNAME=machine.server.com TERM=vt100 SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=::[STUFF] 1754 22 CVSROOT=:[DIR] SSH_TTY=/dev/pts/3 ANT_HOME=/opt/apache-ant-1.7.1 USER=[USER] LS_COLORS=[COLORS] SSH_AUTH_SOCK=[DIR] KDEDIR=/usr MAIL=[DIR] PATH=[DIRS] INPUTRC=/etc/inputrc PWD=[PWD] JAVA_HOME=/opt/jdk1.6.0_21 LANG=en_US.UTF-8 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass M2_HOME=/opt/apache-maven-2.2.1 SHLVL=1 HOME=[~] LOGNAME=[USER] SSH_CONNECTION=::[STUFF] LESSOPEN=|/usr/bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/grep OLDPWD=[DIR]

मुझे अभी पता चला है कि prog.sh का स्टॉप) हिस्सा वास्तव में इस बात की गारंटी नहीं है कि यह जिस प्रक्रिया को रोकने का दावा करता है वह चल रहा है - यह पीआईडी ​​को मारने की कोशिश करता है और सभी आउटपुट को दबा देता है और फिर अस्थायी फाइल को डिलीट कर देता है और मैन्युअल रूप से STOPPED हो जाता है। लॉग फ़ाइल में। इसलिए मैं अब इतना निश्चित नहीं हूं कि जब मैं इसके लिए पीएस कर रहा हूं तो प्रक्रिया हमेशा चल रही है, हालांकि ऊपर दिए गए कोड का नमूना इंगित करता है कि यह कम से कम गलत तरीके से चलता है। जब मैं कल काम पर लौटूंगा तो मैं इस अनछुए बेमिसाल को देखता रहूंगा।


निम्नलिखित कमांड आउटपुट क्या है? ps eu | grep prog.sh
ब्लडफिलिया

मैं इसे पोस्ट में संपादित करूंगा, क्योंकि यहां फिट होने के लिए लगभग 1,000 अक्षर बहुत लंबे हैं। हालाँकि मुझे इसे थोड़ा संपादित करना पड़ सकता है, क्योंकि मुझे नहीं लगता कि मैं उन प्रणालियों के बारे में अधिक जानकारी दे सकता हूं जो मैं कर रहा हूं।
हैमर ब्रो।

प्रक्रिया का नाम जावा हो सकता है, प्रोग नहीं। क्या आपने एक जावा प्रक्रिया की तलाश की है?
एमबीराडले

जवाबों:


1

$!पीआईडी इस बात का है suतो आप अपने बजाय यह backgrounding रहे हैं के बाद से $_CMD। आपको &समापन उद्धरण के अंदर जाना चाहिए ।

उपयोग करने के बजाय अपनी प्रक्रिया 'PID का उपयोग करें pidofया pgrepप्राप्त करें $!। यदि आप एक ऐसी प्रणाली पर हैं जो उपस्टार्ट का उपयोग करता है या एक समान डेमॉन प्रणाली है, तो आपको अपनी स्क्रिप्ट को उन लोगों के बाद मॉडल करना चाहिए /lib/lsb/init-functionsया फ़ंक्शन का उपयोग करना चाहिए ।


यहां आंख से मिलने से ज्यादा कुछ होना चाहिए। यदि मैं समापन उद्धरण के अंदर और अंदर जाता हूं, तो कार्य लटका रहता है, हालांकि यह PS पर "su [उपयोगकर्ता] -c निष्पादन / ऑप्ट / jdk / jre / bin / java -server Xmx768m -D / Java मापदंडों और के रूप में प्रदर्शित होता है उनके मान] -जर [...] / prog.jar >> [logdir] /log.file 2> & 1 & "कंसोल हैंग होता है, और ^ C कुछ नहीं करेगा। अगर मैं इसे किसी अन्य टर्मिनल के माध्यम से मारता हूं, तो कंसोल अनहैन्ग्स, सिवाय इसके कि एकमात्र इनपुट जिसका कोई प्रभाव है ^ C, जो एक और संकेत लाता है। कोई और चाबी काम नहीं करती। मुझे यकीन नहीं है कि यह कमान क्यों लटकी हुई है, क्योंकि यह उतना अच्छा है जितना मैं बता सकता हूं।
हैमर ब्रो।

यह अभी भी असामान्य रूप से और अनियमित रूप से समाप्त हो रहा है, लेकिन मैं कम से कम बता सकता हूं कि अब आपके और अवलोकन के लिए क्या हो रहा है। मैं वास्तव में सोच रहा हूँ कि इसका मूल रूप बिलकुल कैसे काम करता है, अगर $! एसयू के पीआईडी ​​लौटाता है, लेकिन यह कुछ फैशन में काम करना चाहिए क्योंकि यह स्क्रिप्ट उत्पादन संस्करणों द्वारा उपयोग किया जाता है। कम से कम मुझे एक पीआईडी ​​मिल रही है और ... ओह, हे, लॉग फ़ाइलों को अब जावा एक्सेप्शन और स्टैक ट्रैक्स मिल रहे हैं। मैं व्यापार में हूँ! धन्यवाद।
हैमर ब्रो।

@ हैमर ब्रो: आप यह पहले से ही जानते होंगे, लेकिन resetप्रोग्राम को मारने के बाद टर्मिनल स्टॉप को दुर्व्यवहार करने के लिए कमांड (इसे अंधे टाइप करें, यदि आवश्यक हो, एंटर या ^ C) दबाने के बाद उपयोग करें।
डेनिस विलियमसन

2

जैसा कि प्रक्रिया दिखाई नहीं दे रही है, मुझे जावा के साथ एक ही बात का सामना करना पड़ा। प्रयत्न, कोशिश:

ps auxm

(नोट: कोई डैश!)

यह शायद एक धागा है, जो ps ज्यादातर मामलों में नहीं दिखता है।

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