इनायत से इसके नाम के साथ एक डेमन को कैसे मारना है?


16

मैं आमतौर पर एक प्रक्रिया को मार देता हूं killall

killall markdoc

लेकिन मुझे यकीन नहीं है कि अगर यह कमांड सुंदर तरीके से प्रक्रिया को समाप्त कर देता है। क्या यह आदेश सुशोभित समाप्ति को प्राप्त करता है? यदि ऐसा नहीं होता है, तो मैं कैसे इसके नाम के साथ एक प्रक्रिया को इनायत से मार सकता हूं?


क्या आपके वितरण में स्टार्ट-स्टॉप-डेमॉन है ?
9

मैं Ubuntu 10.04 LTS सर्वर x64 का उपयोग कर रहा हूं । वह डेमन क्या है?
Eonil

यह डेमों को शुरू करने / रोकने और संबंधित सूचनाओं को प्रबंधित करने के लिए जेनेरिक टूल है, जैसे पीआईडी ​​फाइलें। यह उबंटू में मौजूद है, इसका मैन पेज देखें ।
मैनटवर्क

जवाबों:


19

आपका प्रश्न स्पष्ट नहीं है, आप शीर्षक में एक डेमॉन के बारे में बात करते हैं, लेकिन शरीर में केवल एक सामान्य प्रक्रिया के बारे में बात करते हैं।

एक डेमन के लिए इसे रोकने के लिए विशिष्ट साधन हैं, उदाहरण के लिए डेबियन में आपके पास है

    service daemon-name stop

या

    /etc/init.d/daemon-name stop

अन्य वितरण / ओएस में उपयोग किए जाने वाले अन्य इनस्क्रिप्ट प्रारूप के लिए समान सिंटैक्स मौजूद हैं।

एक गैर-डेमॉन प्रक्रिया को मारने के लिए, इसे किसी तरह से नियंत्रण से बाहर करना, आप सुरक्षित रूप से उपयोग कर सकते हैं killallया pkill, यह देखते हुए कि वे डिफ़ॉल्ट रूप से उपयोग करते हैं SIGTERM(15) सिग्नल, और किसी भी शालीनतापूर्वक लिखित आवेदन को पकड़ना चाहिए और इस संकेत को प्राप्त करने पर शालीनता से बाहर निकलना चाहिए। । इस बात पर ध्यान दें कि ये उपयोगिताओं को अधिक मार सकता है यदि एक ही नाम के साथ कई प्रक्रियाएं हों।

यदि वह काम नहीं करता है, तो आप SIGINT(2), फिर SIGHUP(1), और अंतिम उपाय SIGKILL(9) के रूप में कोशिश कर सकते हैं । इस अंतिम सिग्नल को एप्लिकेशन द्वारा नहीं पकड़ा जा सकता है, ताकि यह कोई सफाई नहीं कर सके। इस कारण इसे हर बार आपको टाला जाना चाहिए।

दोनों pkillऔर killallके रूप में एक संकेत पैरामीटर को स्वीकार -NAME, के रूप में

pkill -INT process-name

धन्यवाद। वास्तव में मेरा मूल प्रश्न था markdoc serve &और svnserve -d। मुझे लगता है कि यह एक तरह का डेमॉन है, लेकिन मेरे लिए कुछ भी निश्चित नहीं था :)
Eonil

killallहत्यारा है!
xdevs23

3

बीएसडी-जैसे और अन्य डिस्ट्रोस पर, आपके पास अक्सर /etc/rc.d/ में स्क्रिप्ट होती हैं जो आमतौर पर आपके सिस्टम में डेमॉन को शुरू करने, फिर से शुरू करने और रोकने का प्रबंधन करती हैं। डेमॉन को रोकने के लिए आप या तो स्क्रिप्ट को पूर्ण पथ के साथ कहेंगे जैसे:

# /etc/rc.d/acpid stop

या कमांड का उपयोग करें:

# rc.d stop acpid

मैं आपके सिस्टम को शुरू करने और डेमॉन को रोकने के लिए इस स्क्रिप्ट को आज़माने की अत्यधिक अनुशंसा करता हूं:

#!/bin/bash

chk_status(){
  target=$1
  if [[ $target != "functions" && $target !=  "functions.d" ]]
  then
    if [[ -f "/var/run/daemons/$target" ]]
     then
       stat="\e[1;32m[RUNNING]"
     else
       stat="\e[1;31m[STOPPED]"
     fi

    printf "$stat \t\e[1;34m$target\e[0;0m\n"
  fi
}

daemons=($(for daemon in /etc/rc.d/*; do echo "${daemon#\/etc\/rc.d\/}"; done))

if [[ $1 != "" ]]
then
 chk_status $1
else
 for d in "${daemons[@]}"; do
   chk_status $d
 done | sort
fi

0

स्क्रिप्ट killprocमें उपलब्ध फ़ंक्शन की जांच करें /etc/init.d/functions, फ़ाइल को स्रोत करें और फ़ंक्शन का उपयोग करें। या उपयोग pgrepऔर pkillउपयोगिताओं की जांच करने के लिए कि क्या वे जानबूझकर काम कर रहे हैं और फिर उनका उपयोग करें। उदाहरण: pkill -SIGTERM mysqldमेसकल्ड को सुरक्षित शटडाउन करने और डिस्क पर डेटाबेस को फ्लश करने से पहले, मारने के लिए TERM किल सिग्नल भेजेंगे।

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