লিনাক্স: ব্যাকগ্রাউন্ড টাস্ক


194

আমি কীভাবে লিনাক্সের শেষ প্রসারিত ব্যাকগ্রাউন্ড টাস্কটিকে হত্যা করব?

উদাহরণ:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????

18
এটি কীভাবে প্রোগ্রামিং সম্পর্কিত নয়? বাশ প্রোগ্রামিং প্রোগ্রামিং হয় না?
ফ্লাইবায়ার

6
এটি এসও এবং এসইউর মধ্যে ওভারল্যাপ অঞ্চলে, তবে আমি মনে করি এটি এখানে এসও-তে আরও ভাল ফিট করে। এইভাবে চিন্তা করার জন্য আমার মাপদণ্ডটি হ'ল @ ফ্লাইওয়াইয়ার যদি কোনও স্ক্রিপ্টে এটি করে থাকেন তবে এটি প্রোগ্রামিং করছে। যদি তিনি কেবল কমান্ড লাইন থেকে এটি করতে চান তবে আমি বলতে পারি এটি এসইউর অন্তর্ভুক্ত।
বিল

10
শেল স্ক্রিপ্টিংও প্রোগ্রামিং করছে।
ক্লিটিস

উত্তর:


234

বাশে এর জন্য একটি বিশেষ পরিবর্তনশীল রয়েছে:

kill $!

$! পটভূমিতে মৃত্যুদন্ড কার্যকর করা শেষ প্রক্রিয়ার পিআইডি-তে প্রসারিত হয়।


68
@ polm23; না, ^Zপটভূমি কাজ করে না, এটি তাদের থামায়। পরবর্তীটি bgপ্রকৃত 'ব্যাকগ্রাউন্ডিং' (পটভূমিতে এক্সিকিউশনটি পুনরায় শুরু করে) করে এবং এরপরে $!প্রত্যাশা অনুযায়ী কাজ করে।
ফালস্ট্রো

ধরে নেওয়া যাক ????এক বা একাধিক কমান্ডের জন্য ব্রিদিং হত্যা পর নিষ্পন্ন করা হবে, যদি ঐ কমান্ড কোনো কাজ পটভূমি প্রক্রিয়া দ্বারা সম্পন্ন উপর নির্ভর কোন পরিষ্করণ বা সমাপ্তি-আপ কর্ম যা পটভূমি প্রক্রিয়া পরে একটি সংকেত হ্যান্ডলার মধ্যে সঞ্চালন করা হতে পারে মনোযোগী হতে একটি (trappable) সংকেত প্রাপ্তি। এই জাতীয় কোনও 'নির্ভরশীল' কমান্ডের প্রথমটির আগে একটি wait(সম্ভবত একটি syncবা এমনকি একটি দ্বারা অনুসরণ করা sleep <n>) সেরা Best
ack

2
সমাপ্তির জন্য: একক% বর্তমান জবকেও বোঝায় আপনি "কিল%" দিয়ে থামানো কাজটি (^ z) হত্যা করতে পারবেন। আমি প্রায় সবসময় ^ z এর পরে এটি ব্যবহার করি।
t3o

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

289

আপনি জব নম্বর দিয়ে হত্যা করতে পারেন। আপনি যখন কোনও কাজ পটভূমিতে রাখেন তখন আপনি এমন কিছু দেখতে পাবেন:

$ ./script &
[1] 35341

যে [1]কাজ সংখ্যা এবং মত রেফারেন্সড করা যেতে পারে:

$ kill %1
$ kill %%  # Most recent background job

কাজের সংখ্যাগুলির তালিকা দেখতে jobsকমান্ডটি ব্যবহার করুন । থেকে আরও man bash:

শেলটিতে একটি চাকরি উল্লেখ করার বিভিন্ন উপায় রয়েছে। চরিত্রটি %একটি কাজের নাম পরিচয় করিয়ে দেয়। কাজের নম্বর nহিসাবে উল্লেখ করা যেতে পারে %n। কোনও কাজ এটি শুরু করতে ব্যবহৃত নামের একটি উপসর্গ ব্যবহার করে বা তার কমান্ড লাইনে উপস্থিত একটি স্ট্রিং ব্যবহার করেও উল্লেখ করা যেতে পারে। উদাহরণস্বরূপ, %ceএকটি থামানো ceকাজ বোঝায় । যদি উপসর্গ একাধিক কাজের সাথে মেলে, তবে ব্যাশ একটি ত্রুটির কথা জানায়। %?ceঅন্যদিকে ব্যবহার করা ceতার কমান্ড লাইনের স্ট্রিং যুক্ত যে কোনও কাজকে বোঝায় । যদি স্ট্রিংগুলি একাধিক কাজের সাথে মেলে, তবে ব্যাশ একটি ত্রুটির খবর দেয়। প্রতীক%% এবং%+বর্তমান কাজের শেল ধারণাটি উল্লেখ করুন, এটি অগ্রভাগে বা ব্যাকগ্রাউন্ডে শুরু হওয়ার সময় শেষ কাজটি বন্ধ ছিল stopped আগের কাজটি ব্যবহার করে রেফারেন্স করা যেতে পারে (কোনও কাজের সুনির্দিষ্টতার সাথে নেই) এছাড়াও বর্তমান কাজকে বোঝায়।%-। কাজের সাথে সম্পর্কিত আউটপুটে (উদাহরণস্বরূপ, জবস কমান্ডের আউটপুট), বর্তমান কাজটি সর্বদা একটি এর সাথে পতাকাযুক্ত থাকে +এবং পূর্ববর্তী কাজটি একটি দিয়ে -। একক%


রেকর্ডের জন্য, আমি মনে করি এটি যদি কাজ নিয়ন্ত্রণ সক্ষম করে তবেই এটি কাজ করে। যদিও আমি মনে করি আপনি এটি স্ক্রিপ্টগুলিতে ( set -m) চালু করতে পারেন তবে এটি ইন্টারেক্টিভ ব্যবহারের উদ্দেশ্যে। দেখুন stackoverflow.com/questions/690266/... পাশাপাশি
falstro

9
খুব দরকারী প্রতীক, এই %1এবং %%- বিশেষত। কিছু জিনিস Ctrl-C এ মারা যায় না, তাই আপনার সেগুলি Ctrl-Z করা দরকার এবং তারপরেও kill -9 %%। একটি উদাহরণ যেখানে আমি এটি দরকারী পেয়েছি তা হ'ল: while true; do mplayer <some unstable online radio>; date >> restarts.log; done- Ctrl-C কেবল আপনাকে পরবর্তী লুপ পুনরাবৃত্তিতে নিয়ে যাবে। আমার করণীয় আগে psবা হতে পারে jobs -lএবং তারপরে পিআইডি পুনরায় টাইপ করুন যা ক্লান্তিকর।
টমাসজ গ্যান্ডোর

সব কাজের জন্য একটি আছে?
সিএমসিডিগ্রাগনকাই

3
@TomaszGandor সেই কারণে আপনি প্রতিস্থাপন করতে চান পারে এর while trueসঙ্গে while sleep 1। এটির সাথে বাঁচতে পারলে পুনরায় আরম্ভ করার আগে এটি আপনাকে একটি সংক্ষিপ্ত বিলম্ব দেবে এবং আপনি যদি দুটিবার সিটিআরএল-সি মারেন তবে দ্বিতীয়টি ঘুমকে বাধা দেবে, এটি একটি শূন্য-বহির্গমন দিয়ে শেষ হবে এবং লুপটি ভেঙে যাবে।
ফলস্ট্রো

45

নীচের কমান্ডটি আপনাকে পিড সহ আপনার সেশনের সমস্ত পটভূমি প্রক্রিয়াগুলির একটি তালিকা দেয়। এরপরে আপনি এটি প্রক্রিয়াটি মারতে ব্যবহার করতে পারেন।

jobs -l

ব্যবহারের উদাহরণ:

$ sleep 300 &
$ jobs -l
[1]+ 31139 Running                 sleep 300 &
$ kill 31139

25

এটি সমস্ত পটভূমি প্রক্রিয়া হ'ল:

jobs -p | xargs kill -9

1
এটি আমি আগে ব্যবহার করতাম তবে kill -9 %%টাইপিং কম হয় :)
টমসজ গ্যান্ডার

4
@ টমাসজেন্ডার এটি কেবলমাত্র বর্তমান কাজটি শেষ করে দেবে অর্থাৎ শেষ কাজটি অগ্রভাগে বন্ধ হয়ে গেছে বা পটভূমিতে শুরু হয়েছিল। উত্তরের কমান্ডটি সমস্ত চাকরিকে হত্যা করবে।
বিটেক


2
skill doB

skill হত্যার কমান্ডের একটি সংস্করণ যা আপনাকে প্রদত্ত মানদণ্ডের ভিত্তিতে এক বা একাধিক প্রক্রিয়া নির্বাচন করতে দেয়।


0

আপনার এটির পিড দরকার ... এটির জন্য "পিএস-এ" ব্যবহার করুন।


0

এটি বিষয়গুলির উত্তরের বাইরে, তবে যারা আগ্রহী তাদের পক্ষে এটি মূল্যবান হতে পারে।

@ জন কুগেলম্যানের উত্তর হিসাবে,% চাকরির নির্দিষ্টকরণের সাথে সম্পর্কিত। কীভাবে দক্ষতার সাথে এটি খুঁজে পাব? কম & প্যাটার্ন কমান্ডটি ব্যবহার করুন, মনে হচ্ছে মানুষ কম পেজার ব্যবহার করছে (নিশ্চিত নয়), ম্যান বাশ টাইপ &% তে টাইপ এন্টারটি কেবল '%' সম্বলিত লাইনগুলি দেখাবে, সমস্ত পুনরায় প্রদর্শন করতে, টাইপ করুন & টাইপ করুন। তারপরে প্রবেশ করুন।


-3

শুধু কিল্ড কমান্ডটি ব্যবহার করুন:

কিল্ল টাস্ক নেম

আরও তথ্য এবং আরও উন্নত বিকল্পের জন্য, "ম্যান কিলাল" টাইপ করুন।


4
আমার মনে হয় যখন পিআইডি-তে আপনার সহজে অ্যাক্সেস থাকে তখন কিল্লাল কিছুটা আক্রমণাত্মক। এবং বিপজ্জনকও, বিশেষত যদি আপনি মূল হন
ডেভ ভোগ্ট

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