প্রক্রিয়া চলমান থাকলে কীভাবে হত্যা করা যায়?


14

বর্তমানে আমি আমার sh স্ক্রিপ্ট ফাইলে এর মতো লাইন ব্যবহার করছি:

kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'` 

তবে আমি আশ্চর্য হই যে কেবল প্রক্রিয়া ( myServerএখানে) চলমান থাকলে কীভাবে এটি কল করবেন ?


killপ্রক্রিয়াটি কেবল তখনই কল করা অসম্ভব , কারণ পরীক্ষা এবং অনুরোধের মধ্যে একটি দৌড়ের শর্ত রয়েছে kill(সেই স্বল্প সময়ে প্রক্রিয়াটি অন্য কারণে থামানো সম্ভব) stopped আপনার ব্যবহার করা উচিত pkillবা killallযা আপনি যা করার চেষ্টা করছেন ঠিক তেমনই করুন তবে কম টাইপ করে (এবং সম্ভবত কিছু অন্যান্য সুবিধাও)।
জানক

উত্তর:


20

আমি সাধারণত pgrep এবং pkill ব্যবহার করি

if pgrep myServer; then pkill myServer; fi

7
কেন নয় pkill myServerবা killall -q myServer? অযোগ্য প্রক্রিয়াগুলিকে হত্যা করার চেষ্টা করার কোনও খারাপ দিক নেই।
ডেভিড ফোস্টার

12
হত্যার কোনও প্রক্রিয়া না থাকলে এটি 0 থেকে প্রস্থান করবে না, সুতরাং এটি স্ক্রিপ্টগুলি ভেঙে দিতে পারে।
boutch55555

6
সংযোজন করুন || trueতারপর।
ডেভিড ফোস্টার 15

সত্য, তবে প্রক্রিয়াটি ইতিমধ্যে মারা গিয়েছিল তা জানাতে আপনার কাছে অন্য যোগ করার নমনীয়তা থাকবে না।
বাউচ 55555

কি হবে if ! killall -q myServer; then echo ERROR; fi?
ডেভিড ফোস্টার 17

9

আপনি নাম ব্যবহার করে pkillবা killallতাদের ম্যান পৃষ্ঠাগুলি পরীক্ষা করতে পারেন pages


হ্যাঁ, বিপরীতে kill, প্রক্রিয়া চলমান থাকলেই এটি হত্যা করবে। উদাহরণস্বরূপpkill -u myuser -f myprocess\.[0-9]+
চেজ টি।

6

কিছুটা ভিন্ন দৃষ্টিভঙ্গি এরকম কিছু হবে:

killall PROCESS || echo "Process was not running."

এই এড়াতে হবে 1ত্রুটি-কোড থেকে প্রত্যাগত killall, কমান্ড যদি প্রক্রিয়া অস্তিত্ব ছিল না। echoঅংশটি কেবল কার্যকর হলেই killallফিরে আসবে 1, যখন নিজেই ফিরে আসবে 0(সাফল্য)।


5
ব্যবহার killall -qকরা ভাল
আনোয়ার

1
সতর্কতা, killall -qসমস্ত ইউনিক্স স্বাদে সমর্থিত নয়, ম্যাকওএস ক্যাটালিনা এখনও এটিতে নেই।
tresf

0

ব্যবহার করার চেষ্টা করুন:

sudo kill `pidof process_name`

যেখানে প্রক্রিয়া_নাম হ'ল প্রক্রিয়াটির নাম আপনি হত্যা করতে চান। এর মধ্যে দুর্দান্ত যা হ'ল পিডোফ প্রদত্ত নামের সাথে মিলে যাওয়া সমস্ত প্রক্রিয়ার পিডের তালিকা তৈরি করবে। যেহেতু কিল একাধিক পিড গ্রহণ করে, তাই এটি একসাথে সমস্তকে মেরে ফেলবে।

আমাকে জানতে দা্ও এটা সাহয্য করে কি - না।


তালিকা খালি থাকলে কী হবে? (আমার মূল বিষয়টি সম্ভব হলে হত্যার আহ্বান জানানো নয়)
myWallJSON

1
যদি তালিকাটি খালি থাকে তবে কিল একটি ত্রুটি কোড 1 প্রদান করবে এবং কোনও কিছুকে হত্যা করবে না। এটি কোনও যুক্তি ছাড়াই কিলকে কল করার চেষ্টা হিসাবে সমান হবে। আপনি একটি if স্টেটমেন্ট যুক্ত করতে পারেন যা পিডোফ একটি খালি তালিকা ফিরিয়ে দেয় কিনা তা প্রথমে পরীক্ষা করে। যদি এটি একটি খালি তালিকা ফিরে না আসে, কল করুন kill `pidof process_name। যদি এটি একটি খালি তালিকা ফেরত দেয়, কিল কলটি এড়িয়ে যান।
31:53

0

ছোট স্ক্রিপ্ট আমি আরএন্ডডি দিয়ে তৈরি করেছি। আমি আশা করি তুমি এটা পছন্দ করবে

#!/bin/bash

echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name  got killed"
else
echo " $proc_name is not running/stopped "
fi

স্ক্রিপ্ট.শ এর মতো কিছু নামের সাথে এটি সংরক্ষণ করুন

chmod +x script.sh
./script.sh

তারপরে আপনার প্রক্রিয়াটির নাম দিন।

দ্রষ্টব্য: আমি এটি এবং এটির জরিমানা দিয়ে অনেকবার চেষ্টা করেছি।


দয়া করে এই স্ক্রিপ্টটিতে কী ভুল আছে এবং আমাদের ভোটের একটি ব্যাখ্যা দরকার দয়া করে।
rʒɑdʒɑ

এই স্ক্রিপ্টের সাথে কোনও ভুল নেই ... +1
WinEunuuchs2 ইউনিক্স

0

প্রক্রিয়াটি উপস্থিত রয়েছে কিনা তা পরীক্ষা করুন pidof। যদি তা হয় তবে এটি হত্যা করুন:

(! pidof process_name) || sudo kill -9 $(pidof process_name)

উপরের কমান্ডটি কার্যকর করার পরে প্রস্থান কোড সর্বদা 0 থাকে।


0

pkillবিকল্প সহ ব্যবহার করুন-f

pkill -f myServer

বিকল্পটি -fহ'ল প্যাটার্ন যা সাধারণত প্রক্রিয়া নামের সাথে মিলে যায়।


-1

আমি ব্যবহার করব:

ps x --no-header -o pid,cmd | awk '!/awk/&&/myServer/{print $1}' | xargs -r kill

xargs -rহত্যা চালানোর জন্য শুধুমাত্র যদি ইনপুট বলে। ps --no-header -eo pid,cmdপার্সিং জন্য একটি ভাল বিন্যাসে আউটপুট পায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.