প্রদত্ত আংশিক নাম দিয়ে সমস্ত প্রক্রিয়া কীভাবে হত্যা করা যায়? [বন্ধ]


618

আমি যে সমস্ত প্রক্রিয়াগুলি পেয়েছি তা আমি হত্যা করতে চাই:

ps aux | grep my_pattern

এটা কিভাবে করতে হবে?

এটা কাজ করে না:

pkill my_pattern

11
কি my_patternকেবল নামের একটি সাবস্ট্রিং, অথবা এটি কোন Regex বিশেষ অক্ষর রয়েছে?
সোভেন মারনাচ

উত্তর:


1313

ব্যবহার করুন pkill -f, যা কমান্ড লাইনের কোনও অংশের সাথে প্যাটার্নটির সাথে মেলে

pkill -f my_pattern

7
@ জায়ান: এটি হত্যার ক্ষেত্রে এটিও বেশ নির্বিচার। এটি বিস্ময়করভাবে
ভুলভাবে চালিত করা

1
@ জয়ান: আপনি আমাকে বোঝাতে যাবেন না :-)। তৃতীয় পক্ষের স্ক্রিপ্টগুলি যে ব্যবহারে জোর দিয়েছিল তার দ্বারা আমি বহুবার পোড়া হয়েছি pkill- সবচেয়ে সাধারণ ভুলটি এই ধারণাটি যে প্রতিটি বাইনারিটির কেবলমাত্র একটি নির্দিষ্ট সময় কোনও সময় উপস্থিত থাকতে পারে being
ঠাকলা

4
যে কোনও ম্যাক ব্যবহারকারী যারা এই উত্তরটি খুঁজে পান যেমন আমি করেছিলাম, ম্যাক সমতুল্য killall -m my_pattern
জেভ আইজেনবার্গ

1
আপনার যদি বেশ কয়েকটি ঝুলন্ত প্রক্রিয়া থাকে যা নিহত হয় না তবে তাদের নির্দয়ভাবে হত্যা করতে পিল -f -9 ব্যবহার করুন
ম্যাককে

18
pgrepআপনি কী হত্যা করতে যাচ্ছেন তা যাচাই করতে আমি প্রথমে ব্যবহারের পরামর্শ দিই । আপনি pgrep -lপ্রক্রিয়া নাম pgrep -aদেখতে বা সম্পূর্ণ কমান্ড লাইন দেখতে ব্যবহার করতে পারেন । এটি প্যাকিলের মতো একই পতাকা ব্যবহার করে। সুতরাং এই ক্ষেত্রে আপনি ব্যবহার করতে পারে pgrep -fa my_pattern
স্টাডিজিক

158

"মাইপ্রসেসনেম" স্ট্রিংয়ের সাথে মিলে সমস্ত প্রক্রিয়াটি মেরে ফেলুন:

ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9

সূত্র: http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9

এই কোডটি কি করছে?

ps -efকম্পিউটার এই ব্যবহারকারীর কাছে দৃশ্যমান উপর প্রক্রিয়া ID এর একটি তালিকা তৈরি করে। পাইপ গ্রেপ ফিল্টার করে যে নীচে যে স্ট্রিং রয়েছে সারি জন্য। এই grep -v grepপ্রক্রিয়াটি নিজেই গ্রেপিংয়ের সাথে মেলে না বলেছে। পাইপ অ্যাজক প্রিন্ট বলছে ডিফল্ট ডিলিমিটার সাদা স্পেসে সারিগুলিকে বিভক্ত করুন এবং দ্বিতীয় কলামে ফিল্টার করুন যা আমাদের প্রক্রিয়া আইডি। পাইপ xargs সমস্ত পিড এর প্রেরণ, সমস্ত kill -9শেষ করে একটি নতুন প্রক্রিয়া স্পিন আপ ।

উপরের কোডটি বিভিন্ন কারণে খারাপ, বিপজ্জনক, কুশ্রী এবং হ্যাকিশ।

  1. কোডটি জোর-সমাপ্ত হওয়ার কারণে যদি কোনও সম্ভাব্যতার কম অবস্থার সাথে কোনও ডাটাবেস অপস বা সুরক্ষিত লেনদেন হয়, তবে সময়ের এক শতাংশের কিছু অংশ, লেনদেনের পারমাণবিকতা নষ্ট হয়ে যায়, অপরিবর্তিত আচরণ তৈরি করে। কিল -9 কোন বন্দী নেয় না। যদি আপনার কোডটি এটির প্রতি সংবেদনশীল হয় তবে সেই xargs killঅংশটি একটি সঞ্চারিত পতাকার সাথে প্রতিস্থাপনের চেষ্টা করুন যা একটি চমত্কার শাটডাউনটির অনুরোধ করে, এবং কেবলমাত্র সেই অনুরোধটি প্রত্যাখ্যান করা হলে, সর্বশেষ-অবলম্বনkill -9

  2. শূন্যের সম্ভাবনা নেই যে আপনি দুর্ঘটনাক্রমে অপারেটিং সিস্টেমটি শেষ করবেন বা কোনও সম্পর্কহীন প্রক্রিয়াতে অপরিজ্ঞাত আচরণের কারণ হয়ে উঠবেন, পুরো সিস্টেমের অস্থিরতার দিকে পরিচালিত করে কারণ ps -efউপস্থিত প্রতিটি সম্ভাব্য প্রক্রিয়াটি তালিকাভুক্ত করে, এবং আপনি নিশ্চিত হতে পারবেন না যে কিছু অদ্ভুত তৃতীয় পক্ষের লাইব্রেরি আপনার ভাগ করে দেয় প্রক্রিয়া নাম, বা কিল -9 পড়ার এবং কার্যকর করার মধ্যবর্তী সময়ে, প্রসেসিডটি অন্য কোনও কিছুতে পরিবর্তিত হয়েছিল, এবং এখন আপনি ঘটনাক্রমে কিছু এলোমেলো প্রক্রিয়াটি শেষ করেছেন যা আপনি চাননি।

তবে, যদি আপনি খুব স্বতন্ত্র নাম সহ ঝুঁকিগুলি এবং নিয়ন্ত্রণগুলি বুঝতে পারেন এবং আপনি কিছু বাদ দেওয়া লেনদেন বা ডেটাতে মাঝে মধ্যে দুর্নীতির বিষয়টি ঠিক করেন, তবে সময়ের ৯৯.৯% ভাল থাকবে। যদি কোনও সমস্যা হয়, কম্পিউটারটি পুনরায় বুট করুন, নিশ্চিত করুন যে কোনও প্রক্রিয়া সংঘর্ষ নেই। এটি এই জাতীয় কোডের কারণে যা প্রযুক্তি সমর্থন স্ক্রিপ্ট তৈরি করে: "আপনি কি আপনার কম্পিউটার পুনরায় চালু করার চেষ্টা করেছেন" একটি স্তর 5 মিমি।


15
নামের সাথে মেলে কোনও প্রক্রিয়া না পাওয়া গেলে এটি একটি ত্রুটি ফেলে দেবে। ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9কোনও যুক্তি না দেওয়া থাকলে আপনি xargs কমান্ডটি কার্যকর না করার জন্য ব্যবহার করতে চাইতে পারেন ।
এপিজিন

2
কেবলমাত্র একটি সামান্য পরিবর্তন, প্রক্রিয়াটির নামটি উদ্ধৃত করা আরও ভাল: ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9 উদ্ধৃতি ব্যতীত আমার পটভূমি প্রসেসগুলির মধ্যে কেবল প্রথমটিই মারা গিয়েছিল। এটি আবার চালানো বাকী সবাইকে হত্যা করেছিল।
আলী হায়দার

-rঅপশনটি ওএস এক্সে বিদ্যমান নেই, সুতরাং এটি মনে হয়।
দানিজেল

52

আপনার যদি প্রক্রিয়াগুলি ব্যবহারে আরও নমনীয়তার প্রয়োজন হয়

for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do 
  kill -9 $KILLPID;
done

আপনি গ্রেপ-ই ইত্যাদি ব্যবহার করতে পারেন


4
-1 আপনার একটি লুপের দরকার নেই, আপনি কেবল পারেন kill -9 `ps ax | awk '[m]y_pattern { print $1 }'`(রিফ্যাক্টরিংটিও নোট করুন; @ সিন্থেসাইজারপ্যাটেলের উত্তরে আমার মন্তব্যও দেখুন)।
ট্রিপলি

11
@tripleee আপনার downvote সঙ্গে কোন সমস্যা নেই, কিন্তু আপনি কি বুঝতে পারছি, যে OQ ছিল "আমি যে আমি দ্বারা পেতে সকল প্রক্রিয়ার হত্যা করতে চান: থানা-aux-|, grep my_pattern" , যা আমি dutyfully স্বীকার করা হয়েছে।
ইউজেন রিয়েক

কিল একসাথে সমস্ত প্রক্রিয়া মেরে ফেলবে, তার জন্য আপনার কোনও লুপের দরকার নেই। তাহলে psতিন প্রসেস 123, 234, এবং 345 ফেরৎ, আপনি পারবেন kill 123 234 345শুধু আপনার মতো rmবা catএকাধিক ফাইল আর্গুমেন্ট।
ট্রিপলি

@tripleee আমি সরানোর mentgrep
Eugen Rieck

for KILLPID in পিএস কুঠার | গ্রেপ 'পুমা' | grep -v 'গ্রেপ' | awk '{মুদ্রণ $ 1;;' গ্রেপটি ; do kill -9 $KILLPID; doneসরিয়ে ফেলবে
জাস্টিন E

18

প্রক্রিয়াটি তালিকাভুক্ত করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন

ps aux | grep -c myProcessName 

আপনার যদি সেই প্রক্রিয়াটির গণনা পরীক্ষা করতে হয় তবে চালান

ps aux | grep -c myProcessName |grep -v grep 

যার পরে আপনি ব্যবহার করে প্রক্রিয়াটি মেরে ফেলতে পারেন

kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }') 

পিএস অক্স প্রক্রিয়াটি তালিকাভুক্ত করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন গ্রেপ-সি মাইপ্রোসেসনাম যদি আপনার সেই প্রক্রিয়ার গণনা পরীক্ষা করতে হয় তবে পিএস অক্স চালান | গ্রেপ-সি মাইপ্রোসেসনাম | গ্রেপ-ভি গ্রেপ যার পরে আপনি কিল -9 using (পিএক্স অক্স | গ্রেপ -ই মাইপ্রোসেসনাম | অরক '{প্রিন্ট $ 2}') ব্যবহার করে প্রক্রিয়াটি মেরে ফেলতে পারেন
নিবেদিত থানিমা

13

এছাড়াও আপনি ব্যবহার করতে পারেন killall -r my_pattern-rপ্রসারিত নিয়মিত অভিব্যক্তি হিসাবে প্রক্রিয়া নামের প্যাটার্নটি ব্যাখ্যা করুন।

killall -r my_pattern

8

আপনি যদি pkill -f PATTERNকিছুটা বিপজ্জনক বিচার করেন তবে আমি ইজকিল একটি বাশ স্ক্রিপ্ট লিখেছিলাম যা আপনাকে হত্যা করতে চান এমন প্যাটার্নগুলির সাথে মেলে এমন কোন প্রক্রিয়াগুলি বেছে নেওয়ার অনুরোধ জানায়।



4

আপনি যদি প্রক্রিয়া আইডির সন্ধানের মাথাব্যথা নিতে না চান তবে নাম অনুসারে প্রক্রিয়াটি মেরে ফেলার জন্য রিজেক্সপ ব্যবহার করুন। উদাহরণস্বরূপ, ক্রোম নিম্নলিখিত কোডটি মারার কৌশলটি করবে।

killall -r --regexp chrome


1
আপনার কেবল দুটি -r বা প্রয়োজন --regexp, যা যথাক্রমে সংক্ষিপ্ত এবং GNU দীর্ঘ বিকল্প option
বিগস্মোকে

3

আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9

অথবা

ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9

এটা আমার জন্য কাজ করে.


1
স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। আপনার কোড লাইনের জন্য দয়া করে 4-স্পেস বা ট্যাব ইন্ডেন্টেশন ব্যবহার করুন যাতে সেগুলি কোড ব্লক হিসাবে ফর্ম্যাট করা হয়। শুভেচ্ছা
YakovL

2

খারাপ শোনাচ্ছে?

 pkill `pidof myprocess`

উদাহরণ:

# kill all java processes
pkill `pidof java`

2

এটি সমর্থন করে না এমন সার্ভারের জন্য এটি করার সর্বোত্তম উপায় খুঁজে পেয়েছে pkill

kill -9 $(ps ax | grep My_pattern| fgrep -v grep | awk '{ print $1 }')

আপনাকে লুপ করতে হবে না।


1

এটি ব্যবহার করার জন্য সবচেয়ে ভাল এবং সবচেয়ে নিরাপদ এর pgrep -fসঙ্গে kill, বা শুধু pkill -f, greping psএর আউটপুট ভুল হয়ে যেতে পারে।

প্যাটার্ন ট্রিকস ps | grepযুক্ত করে | grep -vবা ব্যবহার করে গ্রেপ লাইনটি ফিল্টার করার দরকার রয়েছে তা ব্যবহারের বিপরীতে , pgrepকেবল ডিজাইনের মাধ্যমে নিজেকে বেছে নেবে না।

তাছাড়া, আপনার প্যাটার্ন প্রদর্শিত হওয়া উচিত ps'র UID/ USER, SDATE/ STARTবা অন্য কোন কলাম, আপনি আউটপুটে অবাঞ্ছিত প্রসেস পাবেন এবং তাদের হত্যা, pgrep+ + pkillএই ত্রুটি ভোগা না।

এছাড়াও আমি খুঁজে পেয়েছি killall -r/ -regexp আমার নিয়মিত প্রকাশের সাথে কাজ করে না।

pkill -f "^python3 path/to/my_script$"

man pkill


0

আমি ইউজেন রিয়েকের উত্তর নিয়েছি এবং এটি নিয়ে কাজ করেছি। আমার কোডটি নিম্নলিখিতগুলি যুক্ত করে:

  1. ps ax গ্রেপ অন্তর্ভুক্ত, তাই আমি এটি দিয়ে বাদ দিয়েছি grep -Eiv 'grep'
  2. এটিকে মানব-পঠনযোগ্য করে তুলতে কয়েকটি আইএফ এবং প্রতিধ্বনি যুক্ত করেছে।

আমি একটি ফাইল তৈরি করেছি, নাম রেখেছি, এটি killserverএখানে যায়:

#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
  if [ ! -z $KILLPID ];then
    kill -9 $KILLPID
    echo "Killed PID ${KILLPID}"
    KILLED=yes
  fi
done

if [ -z $KILLED ];then
    echo "Didn't kill anything"
fi

ফলাফল

  myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
  myapp git:(master) bash killserver
Didn't kill anything

0

এটাই উপাই:

kill -9 $(pgrep -d' ' -f chrome)

3
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ইগোর এফ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.