2015-10-12 7 views
5

का उपयोग करके गल्प में चल रहे सभी सर्वरों को कैसे मारें, मैंने अपने सर्वर शुरू करने के लिए gulpfile.js बनाया है, और इसकी सामग्री नीचे देखी जा सकती है। किसी भी कारण से कम पूर्वप्रक्रमक क्रैश, gulpfile.js डेमॉन खराब बाहर निकालता है, तोएक बैश कमांड

gulp.task('default', function() { 
    if(!fs.statSync('/etc/aptly.conf').isFile()){ 
    process.exit(); 
    return; 
    } 

    console.info('Starting static file server SimpleHTTPServer on 0.0.0.0:8080'); 
    aptly_static = spawn('python', ['-m', 'SimpleHTTPServer', '8080'], {'cwd': '/opt/aptly/public', 'stdio': 'inherit'}); 

    console.info('Starting Django runserver on 0.0.0.0:8000'); 
    django = spawn('python', ['manage.py', 'runserver', '0.0.0.0:8000'], {'stdio': 'inherit'}); 

    console.info('Starting Aptly api serve on 0.0.0.0:4416'); 
    aptly_api = run('aptly api serve -listen="0.0.0.0:4416"').exec().pipe(gulp.dest('/tmp/aptlylog')); 

    return watchLess('src/**/*.less') 
    .pipe(debug()) 
     .pipe(reLess) 
     .pipe(gulp.dest('dist/dist')); 

समस्या है। बच्चे python manage.py runserverpython -m SimpleHTTPServeraptly api serve अभी भी चल रहा है।

मुझे ps -aux | grep runserver का उपयोग करके दर्दनाक रूप से समाप्त करना पड़ा है और sudo kill -9 $PID के माध्यम से पीआईडी ​​को हटाने के लिए इसे समान रूप से समाप्त करना पड़ा है।

क्या मेरी gulpfile.js अप्रत्याशित रूप से क्रैश होने पर सभी प्रक्रियाओं को सीधे मारने का कोई तरीका है?

+0

आपको लगता है कि 'pkill -f runerver' कम से कम अंतिम भाग को आसान बनाता है। –

+0

हाँ मुझे पता है लेकिन फिर से, मुझे तीन पिक्ल कमांडों को आग लगाना है। मैं इन आदेशों को एक में जोड़ना चाहता हूं। – python

+0

मैं सभी सर्वरों को मारने के लिए बस एक बैश स्क्रिप्ट लिखने की योजना बना रहा हूं। क्या आपको लगता है कि यह एक अच्छा विचार है? या वहां कुछ बेहतर तरीके हैं – python

उत्तर

1

सभी बाल प्रक्रियाओं को मारने के संकेत को भेजने के लिए एक पुनरावर्ती कार्य का उपयोग करना। निम्नलिखित ./killChilds.sh फ़ाइल

#!/usr/bin/env bash 

function KillChilds { 
    local pid="${1}" # Parent pid to kill childs 
    local self="${2:-false}" # Should parent be killed too ? 

    if children="$(pgrep -P "$pid")"; then 
     for child in $children; do 
      KillChilds "$child" true 
     done 
    fi 

    # Try to kill nicely, if not, wait 15 seconds to let Trap actions happen before killing 
    if ([ "$self" == true ] && kill -0 $pid > /dev/null 2>&1); then 
     kill -s TERM "$pid" 
     if [ $? != 0 ]; then 
      sleep 15 
      kill -9 "$pid" 
      if [ $? != 0 ]; then 
       return 1 
      fi 
     else 
      return 0 
     fi 
    else 
     return 0 
    fi 

}

स्रोत

source ./killChilds.sh 

के साथ अपने बैश में फ़ाइल आप उस के साथ कंसोल में पूरी प्रक्रिया पेड़ को मारने के लिए उपयोग कर सकते हैं बनाएं

killChilds $pid 

जहां $ pid मुख्य प्रक्रिया है। आप फ़ाइल को ~/.bashrc में शामिल करना चाहेंगे ताकि आपको इसे हर बार स्रोत न करना पड़े।

संबंधित मुद्दे