আমি কীভাবে বন্ধ হয়ে যাওয়া সমস্ত কাজকে হত্যা করতে পারি?


91

আমি যখন আমার লিনাক্স সার্ভার থেকে প্রস্থান করার চেষ্টা করি তখন আমি বার্তাটি পাই:

সেখানে চাকরি বন্ধ রয়েছে।

: এগুলো মেরে ফেলার একক আদেশ আছে কি?


Thie অতিরিক্ত উদাহরণ ইউ & এল প্রশ্ন ও উত্তর: unix.stackexchange.com/questions/124428/...
SLM

আমার এখন বিপরীত সমস্যা ছিল, আমি যখন শেলটি ছাড়ি তখন এটি বন্ধ হওয়া কাজের বিষয়ে সতর্ক করবে না! রাখা ছিল shopt -s checkjobsআমার .bashrc মধ্যে
স্যাম ওয়াটকিনস্

1
আবার সিটিটিএল + ডি টিপুন, এটি আপনাকে এখনই প্রস্থান করতে দেবে, সেই প্রক্রিয়াগুলিতে সেই চাকরিগুলি মেরে ফেলবে
জেনস টিমারম্যান

উত্তর:


73

ব্যাশের অধীনে বন্ধ হওয়া সমস্ত কাজ দ্রুত খতম করতে, প্রবেশ করুন:

kill -9 `jobs -ps`

jobs -ps-pবন্ধ হওয়া ( -s) কাজের প্রক্রিয়া আইডি ( ) তালিকাভুক্ত করে ।
kill -9 `jobs -ps`তাদের সকলকে সিগিলিল সিগন্যাল প্রেরণ করে।


22
-১ "চাকরি হত্যার জন্য"

1
কাজটি যখন "sudo su" তখন কাজ করেনি। অর্থাত্ sudo kill `jobs -p`কাজ করেন নি তবে স্পষ্টভাবে পিআইডি টাইপ করেছেন।
ব্যবহারকারী 13107

14
এটিকে এত উচ্চতর কেন করা হচ্ছে? এটা ভুল. যদি প্রক্রিয়াগুলি বন্ধ হয়ে যায়, তবে প্রক্রিয়াগুলি বন্ধ হয়ে যাওয়ার পরে, এর killমতো কোনও কিছুই করা যায় না, তারা ডিফল্টরূপে তাদের কাছে প্রেরিত SIGTERM (-15) প্রক্রিয়া করবে না।
slm

6
কিল -9 কৌতুক করবে।
সময়সূচী

84

এটি টাইপ করার চেষ্টা করুন:

kill -9 $(jobs -p)

9
এটি করা উচিত, তবে আমার মনে হয় সাইনकिल (-9) প্রেরণের আগে তার প্রথমে একটি সিগমেন্ট (-15) প্রেরণ করা উচিত। সুতরাং সম্ভবত "কিল $ (জবস-পি); স্লিপ 3 এস; কিল -9 $ (জবস-পি)" এর মতো কিছু প্রস্তাব দেওয়া ভাল। প্রথমে সিগনটার পাঠানো কাজগুলি একটি পরিষ্কার প্রস্থান করতে সক্ষম হতে পারে (বরাদ্দকৃত সম্পদগুলি মুক্ত করা ইত্যাদি)।
রিয়েলস

3
কেভিন ডিউক, আপনার উত্তরটি আমার পক্ষে কাজ করেছে। আমার খ্যাতি 15 নেই বলে আমি ভোট দিতে পারিনি। কিল -9 $ (কাজ

2
@ রেইমস বাদে, যেমন এসএমএল নির্দেশ করেছে, তারা সাইনটারম পাবে না কারণ তারা বন্ধ রয়েছে।
পল গিয়ার

1
Zsh এ কাজ করে না। Zsh এর কারণে কাজের সাথে POS IX মেনে চলবে না
ম্যাক্স কোপলান

তারপরে, কীভাবে zsh মোকাবেলা করবেন?
fx-kirin

16

গৃহীত উত্তরটি সমস্ত চাকরিকে হত্যা করবে (যা এই ক্ষেত্রে যথেষ্ট) কেবলমাত্র বন্ধ হওয়াগুলি নয়। আপনি যদি কেবল থামানো ব্যক্তিদের হত্যা করতে চান তবে চালান:

kill $(jobs -l | grep Stopped | cut -d' ' -f3)

গ্রেপ / কাট এক awk '/Stopped/{print $3}')
বিভক্ত

2
-sগৃহীত উত্তর ফিল্টার মাত্র বন্ধ কারোওর উপর যুক্তি
79E09796

12

সহজতম উপায়টি হ'ল তাত্ক্ষণিকভাবে প্রস্থানটি পুনরায় চেষ্টা করা; bash"থামিয়ে দেওয়া সমস্ত কাজকে মেরে ফেলুন" এর অর্থ এটি নেওয়া হবে।


4
এটি এমন একটি এইচইপি প্রেরণ করবে যা অগত্যা কোনও কাজ বন্ধ করে দেয় না।
স্টিফেন নিডজিয়েলস্কি

7
for x in `jobs -p` ; do kill -9 $x ; done

2
আপনি এই লাইনের জন্য পড়া সহজ করে তুলতে কোড ফর্ম্যাটিং যুক্ত করতে পারেন।
ড্রস্লাস

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

বিন্যাসটি ঠিক আছে। আমাদের ব্যাকটিক্স ব্যবহার করে -p পাশ করতে হবে অন্যথায় এটি কমান্ড হিসাবে বিবেচনা করবে না এবং এটি একটি ত্রুটি ছুঁড়ে দেবে।
মনু

5

এটি যদি অন্য কাউকে সহায়তা করে - বেশিরভাগ লোকেরা এখানে রয়েছেন কারণ তাদের কিছু থামানো প্রক্রিয়া রয়েছে যা তারা শেলের মাধ্যমে পটভূমি তৈরি করতে পারে। আমাকে অন্য ব্যবহারকারীদের দ্বারা বন্ধ হওয়া প্রক্রিয়াগুলি রুট হিসাবে খুঁজে পাওয়া দরকার, যার জন্য jobsকমান্ডের বৈকল্পিকগুলি করবে না।

প্রায় খনন একটি বিট man psআমাকে এই পেতে:

ps -a -o pid,user,cmd,state | grep 'T$'

ব্যাখ্যা: -aপতাকাটি বলে যে সমস্ত প্রক্রিয়া দেখায়, তারপরে -oআউটপুট নিয়ন্ত্রণ করে, প্রতিটি প্রক্রিয়া সম্পর্কে কী তথ্য প্রদর্শিত হবে। আমি নির্বাচন করছি pid, user, cmd(কমান্ড লাইন), এবং state, যা প্রক্রিয়া রাষ্ট্র

থেকে man ps:

PROCESS STATE CODES
   Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the
   state of a process:
           D    uninterruptible sleep (usually IO)
           R    running or runnable (on run queue)
           S    interruptible sleep (waiting for an event to complete)
           T    stopped, either by a job control signal or because it is being traced
           W    paging (not valid since the 2.6.xx kernel)
           X    dead (should never be seen)
           Z    defunct ("zombie") process, terminated but not reaped by its parent

সুতরাং পরিশেষে আমি এটি পাইপ করি grep T$যা বলে, শেষ কলামে টি আছে এমন সমস্ত প্রক্রিয়া আমাকে দেখান।

এবং তারপরে আমার কাছে বিভিন্ন ব্যবহারকারীর সমস্ত প্রক্রিয়াগুলির একটি দুর্দান্ত তালিকা রয়েছে যা থামানো অবস্থায় রয়েছে।

$ ps -a -o pid,user,cmd,state | grep 'T$'
  865 joson74+ python                      T
  885 joson74+ sh -c less                  T
  886 joson74+ less                        T
 1014 minames+ python3.4 -i /home/minames  T
 5352 MooKo    nano stdio.h                T
 7851 harry    tmux attach                 T
12083 harry    tmux attach                 T
13495 gorylla+ python3.4 -i /home/gorylla1 T
18009 conr1d   vim                         T
19664 enythin+ python                      T
24906 wardlist python                      T

বর্তমান শেলের সাথে যুক্ত চাকরিগুলি থামিয়ে দেওয়া, jobs -psএই উত্তরটির চেয়ে সহজ। বলা হচ্ছে, এই উত্তরটি কেবল Ctrl-Zশেল দিয়ে কাজ বন্ধ করে দেখায় না , তবে সমস্ত বন্ধ কাজ: অন্যান্য শেলস, অন্যান্য ব্যবহারকারী , চাকরিগুলি ডিবাগ করা সহ (যেমন জিডিবি দ্বারা)।
স্টাফেন গ্যারিচন

আমার জন্য সেরা উত্তর, তবে ঠিক কাজ করছে না। ps -el | grep T'টি' স্টেটে প্রক্রিয়াগুলি খুঁজতে আমাকে ব্যবহার করতে হয়েছিল।
dr0i

4

আপনি যদি কিছু বন্ধ থাকা চাকরিগুলি মুছে ফেলতে চান তবে সমস্ত না, এটি চেষ্টা করুন:

প্রথমত, কাজের তালিকা তৈরি করুন, আপনি এরকম কিছু পাবেন:

$ jobs -l

[2]   4813 Stopped                 ./parse < call.txt
[3]-  4819 Stopped                 ./parse < call.txt

থামানো চাকরিতে হত্যা পাঠান, এটি অগ্রভাগে আনার চেয়ে সারি ছাড়া আর কিছুই করবে না, এটি শেষ হবে

$ fg %2
./parse < call.txt
Terminated

$ jobs -l
[3]-  4819 Stopped                 ./parse < call.txt

4

সাধারণত যদি আপনি এই বার্তাটি পান তবে আপনার দুবার লগআউট করতে হবে। উদাহরণস্বরূপ প্রথমে Ctrl+Dআপনাকে বিরত চাকরি সম্পর্কে অবহিত করার জন্য সতর্কতা বার্তা দেয়, দ্বিতীয়বারের জন্য চাপ দেওয়া আপনাকে চাকরিগুলি হারাতে আউট করবে। এটি একই সাথে প্রয়োগ করা হয় logoutএবং exitআদেশগুলিও।

এগুলো নিজে হত্যা করার জন্য, দেখুন: kill $(jobs -p)


আপনি যদি আপনার বর্তমান শেল থেকে কাজগুলি হারাতে না চান, আপনি disownকমান্ড ব্যবহার না করে হত্যা না করে সক্রিয় কাজের ছক থেকে এগুলি সরাতে পারেন । যেমন

$ sleep 1000 &
[1] 19404
$ jobs
[1]+  Running                 sleep 1000 &
$ disown

থামানো কাজগুলি প্রক্রিয়া ( Tচরিত্র) এর অবস্থার দ্বারাও নির্ধারণ করা যায় যার অর্থ প্রক্রিয়াটি সংকেত যেমন SIGSTOP, SIGTSTPবা অন্যান্য (যেমন SIGTTIN, বা SIGTTOU) দ্বারা বন্ধ করা হয়েছিল ।

কেস যখন jobsএকটি শেল builtin কমান্ড উপলব্ধ নেই, বন্ধ প্রসেস নিম্নলিখিত কমান্ড তালিকা করা যেতে পারে:

ps wuax | awk '$8 ~ "T"'

তাদের সকলকে হত্যা করতে, আপনি মূলত টাইপ করতে পারেন:

kill -9 $(ps wuax | awk 'NR>1 && $8 ~ "T" {print $2}')

এখানে একটি সহজ পরীক্ষা:

$ sleep 1000 &
[1] 2014
$ sleep 1000 &
[2] 2015
$ sleep 1000 &
[3] 2016
$ sleep 1000 &
[4] 2017
$ killall -STOP sleep
[1]   Stopped                 sleep 1000
[2]   Stopped                 sleep 1000
[3]   Stopped                 sleep 1000
[4]   Stopped                 sleep 1000
$ ps wuax | awk '$8 ~ "T"'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
vagrant   2014  0.0  0.0   7228   832 pts/0    T    20:38   0:00 sleep 1000
vagrant   2015  0.0  0.0   7228   708 pts/0    T    20:38   0:00 sleep 1000
vagrant   2016  0.0  0.0   7228   760 pts/0    T    20:38   0:00 sleep 1000
vagrant   2017  0.0  0.0   7228   828 pts/0    T    20:38   0:00 sleep 1000
$ kill -9 $(awk 'NR>1 && $8 ~ "T" {print $2}' <(ps wuax))
$ jobs
[1]   Killed                  sleep 1000
[2]   Killed                  sleep 1000
[3]   Killed                  sleep 1000
[4]   Killed                  sleep 1000
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.