আমি যখন আমার লিনাক্স সার্ভার থেকে প্রস্থান করার চেষ্টা করি তখন আমি বার্তাটি পাই:
সেখানে চাকরি বন্ধ রয়েছে।
: এগুলো মেরে ফেলার একক আদেশ আছে কি?
shopt -s checkjobs
আমার .bashrc মধ্যে
আমি যখন আমার লিনাক্স সার্ভার থেকে প্রস্থান করার চেষ্টা করি তখন আমি বার্তাটি পাই:
সেখানে চাকরি বন্ধ রয়েছে।
: এগুলো মেরে ফেলার একক আদেশ আছে কি?
shopt -s checkjobs
আমার .bashrc মধ্যে
উত্তর:
ব্যাশের অধীনে বন্ধ হওয়া সমস্ত কাজ দ্রুত খতম করতে, প্রবেশ করুন:
kill -9 `jobs -ps`
jobs -ps
-p
বন্ধ হওয়া ( -s
) কাজের প্রক্রিয়া আইডি ( ) তালিকাভুক্ত করে ।
kill -9 `jobs -ps`
তাদের সকলকে সিগিলিল সিগন্যাল প্রেরণ করে।
sudo kill `jobs -p`
কাজ করেন নি তবে স্পষ্টভাবে পিআইডি টাইপ করেছেন।
kill
মতো কোনও কিছুই করা যায় না, তারা ডিফল্টরূপে তাদের কাছে প্রেরিত SIGTERM (-15) প্রক্রিয়া করবে না।
এটি টাইপ করার চেষ্টা করুন:
kill -9 $(jobs -p)
গৃহীত উত্তরটি সমস্ত চাকরিকে হত্যা করবে (যা এই ক্ষেত্রে যথেষ্ট) কেবলমাত্র বন্ধ হওয়াগুলি নয়। আপনি যদি কেবল থামানো ব্যক্তিদের হত্যা করতে চান তবে চালান:
kill $(jobs -l | grep Stopped | cut -d' ' -f3)
awk '/Stopped/{print $3}')
-s
গৃহীত উত্তর ফিল্টার মাত্র বন্ধ কারোওর উপর যুক্তি
সহজতম উপায়টি হ'ল তাত্ক্ষণিকভাবে প্রস্থানটি পুনরায় চেষ্টা করা; bash
"থামিয়ে দেওয়া সমস্ত কাজকে মেরে ফেলুন" এর অর্থ এটি নেওয়া হবে।
for x in `jobs -p` ; do kill -9 $x ; done
এটি যদি অন্য কাউকে সহায়তা করে - বেশিরভাগ লোকেরা এখানে রয়েছেন কারণ তাদের কিছু থামানো প্রক্রিয়া রয়েছে যা তারা শেলের মাধ্যমে পটভূমি তৈরি করতে পারে। আমাকে অন্য ব্যবহারকারীদের দ্বারা বন্ধ হওয়া প্রক্রিয়াগুলি রুট হিসাবে খুঁজে পাওয়া দরকার, যার জন্য 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
'টি' স্টেটে প্রক্রিয়াগুলি খুঁজতে আমাকে ব্যবহার করতে হয়েছিল।
আপনি যদি কিছু বন্ধ থাকা চাকরিগুলি মুছে ফেলতে চান তবে সমস্ত না, এটি চেষ্টা করুন:
প্রথমত, কাজের তালিকা তৈরি করুন, আপনি এরকম কিছু পাবেন:
$ 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
সাধারণত যদি আপনি এই বার্তাটি পান তবে আপনার দুবার লগআউট করতে হবে। উদাহরণস্বরূপ প্রথমে 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