পিআইডি-র পরিবর্তে আমি কীভাবে কোনও প্রক্রিয়াটিকে হত্যা করতে পারি?


349

কখনও কখনও যখন আমি ফায়ারফক্স শুরু করার চেষ্টা করি তখন এটিতে "ফায়ারফক্স প্রক্রিয়া ইতিমধ্যে চলছে" বলে মন্তব্য করে। সুতরাং আমি এটি করতে হবে:

jeremy@jeremy-desktop:~$ ps aux | grep firefox
jeremy    7451 25.0 27.4 170536 65680 ?        Sl   22:39   1:18 /usr/lib/firefox-3.0.1/firefox
jeremy    7578  0.0  0.3   3004   768 pts/0    S+   22:44   0:00 grep firefox
jeremy@jeremy-desktop:~$ kill 7451

আমি যা চাই তা হ'ল একটি আদেশ যা আমার জন্য সব করবে। grepপ্রক্রিয়াগুলির তালিকায় এটি একটি ইনপুট স্ট্রিং নেবে এবং এর জন্য (বা যাই হোক না কেন), এবং আউটপুটে সমস্ত প্রক্রিয়াটিকে মেরে ফেলবে:

jeremy@jeremy-desktop:~$ killbyname firefox

আমি পিএইচপি-তে এটি করার চেষ্টা করেছি তবে কেবলমাত্র এমন প্রক্রিয়াগুলি দেখায় যা পিএইচপি স্ক্রিপ্টে নিজেই exec('ps aux')সম্পাদিত হয়েছে exec()(সুতরাং এটি কেবলমাত্র প্রক্রিয়াটি দেখায় এটি নিজেই))


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

1
এই সবচেয়ে নিরাপদ উপায় হিসেবে JohnB এই উত্তরে বলেন: stackoverflow.com/questions/6381229/...
tecnoshopbq


এটি একটি পুরানো প্রশ্ন, তবে আপনি কি দয়া করে গৃহীত উত্তরটি পরিবর্তন করতে পারেন? আপনি যা চিহ্নিত করেছেন সেটি JVM দ্বারা চালিত অনেকগুলি প্রক্রিয়াতে ব্যর্থ।
Luís de Sousa

এই বিষয়টির জন্য যে কেউ রেফারেন্স করছেন, উপরের মন্তব্যে লুই এই আদেশটির নিচে উত্তরটি উল্লেখ করছেন pkill -f "Process name"...
ডিগার

উত্তর:


505
pkill firefox

আরও তথ্য: http://linux.about.com/library/Cmd/blCdd1_pkill.htm


7
খুনের প্রক্রিয়া চালানোর আগে আপনি কী হত্যা করছেন তা নির্ধারণ করার জন্য পিগ্রেপ ব্যবহার করা ভাল জিনিস। বিশেষত যখন ব্যবহার -f
আকরিকস

pkill খুব বন্ধুত্বপূর্ণ না। আপনি কিলাল তাদের যেভাবে নাম দেয় সেভাবে নাম দিতে পারবেন না।
অক্টোপাস

2
pkill -U <username>বেশ কার্যকর। আমার একটি সোলারিস ওয়েব সার্ভার রয়েছে, প্রকৃত ওয়েব সার্ভার ডেমনটি তার নিজস্ব ব্যবহারকারীর সাথে একটি পরিষেবা হিসাবে সেটআপ হয় । সুতরাং ব্যবহারকারী দ্বারা নির্দিষ্ট করা পুনঃসূচনাটি ট্রিগার করার সহজ / সহজ উপায়।
রায়স্টর্ম

6
হত্যার জন্য জোর করতে: pkill -9 ফায়ারফক্স
জাস্টাস

এটি সেরা অর্ধবার কাজ করে। -fএকটি সর্বজনীন সমাধানের জন্য আপনার কমপক্ষে পতাকাটি প্রয়োজন ।
Luís de Sousa

112

ব্যবহার করাও সম্ভব:

pkill -f "Process name"

আমার জন্য, এটি নিখুঁতভাবে কাজ করেছে। এটিই আমি খুঁজছিলাম was pkill পতাকা ছাড়া নাম নিয়ে কাজ করে না।

কখন -fসেট করা হয়, সম্পূর্ণ কমান্ড লাইনটি প্যাটার্ন মিলের জন্য ব্যবহৃত হয়।


2
বিশেষত ওয়াইন দিয়ে কিছু চালানোর জন্য -fবিকল্পটির সত্যিকার প্রয়োজন। উদাহরণস্বরূপpkill -f "EvilWindowsServer.exe"
কোডব্রায়ার

এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। প্রথম উত্তরটি বিভিন্ন ধরণের প্রোগ্রামের সাথে ব্যর্থ হয়, যেমন একটি জেভিএম-এ চলছে।
Luís de Sousa

1
-fপাইথন স্ক্রিপ্ট চলমান ব্যাকগ্রাউন্ড প্রক্রিয়াটি হত্যার জন্য আমাকে পতাকাটিও যুক্ত করতে হয়েছিল ।
ম্যাসন

আমার ক্ষেত্রে, আমার 2 টি পতাকা দরকার ছিল:pkill -f -9 PROCESSNAME
স্লাভিক

Centos7.thank
sirmagid

64

আপনি নাম দিয়ে প্রক্রিয়া হত্যা করতে পারেনkillall <name>

killall নির্দিষ্ট কমান্ডগুলির মধ্যে যে কোনও চলমান সমস্ত প্রক্রিয়াতে সংকেত প্রেরণ করে। যদি কোনও সিগন্যালের নাম নির্দিষ্ট না করা থাকে তবে SIGTERM প্রেরণ করা হয়।

সংকেতগুলি নাম দ্বারা নির্দিষ্ট করা যেতে পারে (যেমন -HUP বা -SIGHUP ) বা সংখ্যা দ্বারা (যেমন -1 ) অথবা বিকল্প দ্বারা -s দ্বারা ।

কমান্ডের নামটি যদি নিয়মিত এক্সপ্রেশন (অপশন- আর ) না থাকে এবং এতে একটি স্ল্যাশ (/) থাকে, তবে নির্দিষ্ট ফাইলটি কার্যকর করার প্রক্রিয়াগুলি তাদের নাম বাদে হত্যার জন্য নির্বাচিত হবে।

তবে আপনি যদি প্রক্রিয়াটি না দেখেন তবে ps auxসম্ভবত এটি হত্যার অধিকার আপনার নেই ...


6
সাড়া না দেয় এমন কোনও প্রোগ্রাম বন্ধ করতে জোর করে, TERM এর পরিবর্তে কিল পাঠান:killall -s KILL firefox
মার্টিন হ্যানসেন


25

সবচেয়ে সহজ উপায় হ'ল প্রথমে আপনি সঠিক প্রক্রিয়া আইডি পেয়ে যাচ্ছেন তা পরীক্ষা করে দেখুন:

pgrep -f [part_of_a_command]

ফলাফল আশানুরূপ হলে। সঙ্গে যেতে:

pkill -f [part_of_a_command]

19

অদ্ভুত, তবে আমি এর মতো সমাধানটি দেখিনি:

kill -9 `pidof firefox`

এটি একাধিক প্রক্রিয়া (একাধিক পিডস) যেমন:

kill -9 `pgrep firefox`

আমি পছন্দ করি pidofযেহেতু এটির একক লাইন আউটপুট রয়েছে:

> pgrep firefox
6316
6565
> pidof firefox
6565 6316

যখন আমি এটি কার্যকর করি তখন আমি ত্রুটি পেয়েছি kill: invalid number 'pidof myprogram'। এখানে কি খারাপ ?.
ব্র্যাথলজ

এটি আজই আমার জীবন বাঁচিয়েছে ... আমি আরও লিখতে চাই না তবে আমি এখানে খুশী খুশী। ধন্যবাদ মানুষ.
মিলমাইক

1
দেরিতে আসছেন তবে যদি কেউ অন্য কেউ অবাক হয়ে যায় ... @ ব্র্যাথ্লোজেজে আপনি একক টিক্স রেখেছেন, যখন কমান্ডটির ব্যাকটিকস প্রয়োজন।
স্পেকট্রা

ধন্যবাদ! .. আমি এই ব্যাকটিকগুলি সম্পর্কে সচেতন হব (এবং আমি থাকব) :)
ব্রেথ্লোজে

13

snippetপ্রারম্ভের পথে থাকা সমস্ত প্রক্রিয়াটিকে হত্যা করুন । আপনি কোনও ডিরেক্টরি থেকে শুরু করে সমস্ত অ্যাপ্লিকেশনকে স্নিপেট / ডিরেক্টরি / ডিরেক্টরি হিসাবে রেখে দিতে পারেন। আপনি যখন একই অ্যাপ্লিকেশন ডিরেক্টরি থেকে একই অ্যাপ্লিকেশনটির জন্য বেশ কয়েকটি উপাদান শুরু করেন এটি বেশ কার্যকর।

ps ax | grep <snippet> | grep -v grep | awk '{print $1}' | xargs kill

* আমি উপলব্ধ থাকলে pgrep preffer হবে


1
এটি অ্যান্টিপ্যাটার্নগুলির ঘন ঘন দেখা যায়। এমন একটি রেজেক্স ব্যবহার করুন যা নিজের সাথে মেলে না (বা এতে থাকা স্ক্রিপ্টটির নাম) এবং অকেজো এড়ানgrepps ax | awk '/[s]nippet/ { print $1 }' | xargs kill
ট্রিপলি

1
অকেজো গ্রেপ এড়ানোর সময় আপনি টাইপগুলি এবং স্বয়ংক্রিয় প্রক্রিয়াগুলিতে কমান্ডটি ব্যবহার করার ক্ষমতা
এড়াচ্ছেন

এটি এটি করার সর্বোত্তম উপায়!
অভিনন্দন দুবে

@ ট্রিপলির [s]কাজগুলি কেন এআরজ প্রক্রিয়াটির সাথে মিলে না যাওয়ার পদে তা বুঝতে পেরে দুর্দান্ত লাগবে ?
অ্যান্ডিগ

কারণ রেজেক্স [x]yস্ট্রিংয়ের সাথে মেলে xyতবে বিপরীতে নয়। এটি একটি সাধারণ FAQ। লিঙ্কটি 20 বছরেরও বেশি আগের পৃষ্ঠার লিঙ্ক যা এটি আরও বিশদে ব্যাখ্যা করে; এবং এটি তখনই একটি পুনরাবৃত্ত প্রশ্ন ছিল।
tripleee

11

ম্যাক-তে আমি পিগ্রিপ এবং পিল খুঁজে পেলাম না কিলাল কাজ করছিল না তাই একটি সাধারণ একটি লাইন স্ক্রিপ্ট লিখেছিল: -

export pid=`ps | grep process_name | awk 'NR==1{print $1}' | cut -d' ' -f1`;kill $pid

এটি করার যদি আরও সহজ উপায় থাকে তবে দয়া করে ভাগ করুন।


1
হাঃ হাঃ হাঃ. এটি এই জাতীয় কাজের জন্য একটি উন্মাদ আদেশ। কিছু মনে করো না. আপনি কি এই সহজ এক লাইন কল করেছেন? : ডি সরল হ'ল
কিল্লাল

@ erm3nda :-) সম্মত হন। পেছন ফিরে তাকালে এটি উন্মাদ দেখাচ্ছে। পুনরুদ্ধার করতে পারছি না কেন তখন কিল্ল আমার ম্যাকের সাথে কাজ করছিল না।
ধীরাজ

আপনি "jboss" এর মতো নির্দিষ্ট জাভা প্রক্রিয়াটি মারতে চাইলে এটি খুব কার্যকর। সেক্ষেত্রে কিল্লাল সাহায্য করে না।
জানুয়ারী এম


6

গ্রেপ দিয়ে হত্যা করতে:

kill -9 `pgrep myprocess`

5

আরও সঠিক হবে:

export pid=`ps aux | grep process_name | awk 'NR==1{print $2}' | cut -d' ' -f1`;kill -9 $pid

1
কেন আপনি exportএকটি পরিবর্তনশীল যা আপনি কেবল একই প্রক্রিয়াতে একবার ব্যবহার করতে যাচ্ছেন?
ট্রিপলি


3

আমি নিজেকে একই প্রশ্ন জিজ্ঞাসা করছিলাম তবে বর্তমান উত্তরগুলির সাথে সমস্যাটি হ'ল তারা নিহত হওয়ার প্রক্রিয়াগুলি নিরাপদভাবে পরীক্ষা করে না ... এটি ভয়াবহ ভুল হতে পারে:) ... বিশেষত যদি বেশ কয়েকটি প্রক্রিয়া প্যাটার্নের সাথে মেলে

অস্বীকৃতি হিসাবে, আমি একজন শ সমর্থক নই এবং অবশ্যই উন্নতির অবকাশ আছে।

তাই আমি একটু শ স্ক্রিপ্ট লিখেছিলাম:

#!/bin/sh

killables=$(ps aux | grep $1 | grep -v mykill | grep -v grep)
if [ ! "${killables}" = "" ]
then
  echo "You are going to kill some process:"
  echo "${killables}"
else
  echo "No process with the pattern $1 found."
  return
fi
echo -n "Is it ok?(Y/N)"
read input
if [ "$input" = "Y" ]
then
  for pid in $(echo "${killables}" | awk '{print $2}')
  do
    echo killing $pid "..."
    kill $pid 
    echo $pid killed
  done
fi

2

আপনি যদি জিনোম চালনা করেন তবে উইন্ডোজ হিসাবে যেমন প্রসেসগুলি বদ্ধ করতে আপনি সিস্টেম মনিটর ব্যবহার করতে পারেন (সিস্টেম-> প্রশাসন-> সিস্টেম মনিটর) itor কেডিও তেমন কিছু থাকবে something


2

ডিফল্ট killকমান্ড পিআইডি-র বিকল্প হিসাবে কমান্ডের নাম গ্রহণ করে। হত্যা দেখুন (1) । প্রায়শই ঘটে যাওয়া সমস্যাটি হ'ল bashতার নিজস্ব সরবরাহ করে killযা কাজের নম্বর গ্রহণ করে যেমন পছন্দ করে kill %1তবে আদেশের নাম নয়। এটি ডিফল্ট কমান্ডকে বাধা দেয়। পূর্বের কার্যকারিতা যদি আপনার পরবর্তীকালের চেয়ে বেশি কার্যকর হয় তবে আপনি bashকল করে সংস্করণটি অক্ষম করতে পারবেন

enable -n kill

আরও তথ্যের জন্য দেখুন killএবং বাশenable এন্ট্রি (1)


আমি ক্রিয়াটি কীভাবে পুনরায় সক্ষম করব enable -n kill?
ব্র্যাথলজ

1
@hyprfrcbenable kill
ভী



0

awk oneliner, যা psআউটপুটের শিরোনামকে পার্স করে , তাই আপনাকে কলামের সংখ্যাগুলি (তবে কলামের নামগুলি) যত্ন করার দরকার নেই। সমর্থন রেজেক্স। উদাহরণস্বরূপ, সমস্ত প্রক্রিয়াগুলি হত্যা করতে, যা এক্সিকিউটেবল নামের (পাথ ছাড়াই) শব্দটিতে "ফায়ারফক্স" রয়েছে

ps -fe | awk 'NR==1{for (i=1; i<=NF; i++) {if ($i=="COMMAND") Ncmd=i; else if ($i=="PID") Npid=i} if (!Ncmd || !Npid) {print "wrong or no header" > "/dev/stderr"; exit} }$Ncmd~"/"name"$"{print "killing "$Ncmd" with PID " $Npid; system("kill "$Npid)}' name=.*firefox.*
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.