জম্বি প্রক্রিয়াটি কীভাবে সন্ধান করবেন?


100
System information as of Fri Mar  9 19:40:01 KST 2012

  System load:    0.59               Processes:           167
  Usage of /home: 23.0% of 11.00GB   Users logged in:     1
  Swap usage:     0%                 IP address for eth1: 192.168.0.1

  => There is 1 zombie process.

  Graph this data and manage this system at https://landscape.canonical.com/

10 packages can be updated.
4 updates are security updates.

Last login: Fri Mar  9 10:23:48 2012
a@SERVER:~$ ps auxwww | grep 'Z'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
usera     13572  0.0  0.0   7628   992 pts/2    S+   19:40   0:00 grep --color=auto Z
a@SERVER:~$ 

কীভাবে সেই জম্বি প্রক্রিয়াটি খুঁজে পাবেন?


আপনি কেন সিস্টেম মনিটরটি খুলবেন এবং জম্বি প্রক্রিয়াটি অনুসন্ধান করবেন না?
dlin

8
হেডলেস নো-এক্স সার্ভারে এটি কীভাবে করবেন?
সাব্রেভল্ফি

2
আশ্চর্যজনক যে নীচের কোনও উত্তর আসলে বলে না যে উপরের আউটপুটটির ভিত্তিতে সিস্টেমে কোনও জম্বি প্রক্রিয়া নেই। যদি সত্যিই এটি ছিল, ps auxwww | grep 'Z'কমান্ডটি একটি Zরাজ্যে একটি প্রক্রিয়া দেখানো উচিত ছিল । "সিস্টেমের তথ্য" => There is 1 zombie process.বলাটি একটি বাগ বলে মনে হচ্ছে। হয় যে হয়, বা প্রশ্নে তথ্য নেই।
আরিফেল

উত্তর:


126

একটি জম্বি (প্রক্রিয়া) হত্যার জন্য আপনাকে তার পিতামাতার প্রক্রিয়াটি হ'তে হবে (ঠিক বাস্তব জম্বিগুলির মতো!), তবে এটি কীভাবে পাওয়া যায় তা প্রশ্ন ছিল।

জম্বিটি সন্ধান করুন (প্রশ্নের উত্তর এই অংশে দেওয়া হয়েছে):

a@SERVER:~$ ps aux | grep 'Z'

আপনি যা পান তা হ'ল জম্বি এবং এতে একটি জেড সহ অন্য কিছু, যাতে আপনি গ্রেপটি পাবেন:

USER       PID     %CPU %MEM  VSZ    RSS TTY      STAT START   TIME COMMAND
usera      13572   0.0  0.0   7628   992 pts/2    S+   19:40   0:00 grep --color=auto Z
usera      93572   0.0  0.0   0      0   ??       Z    19:40   0:00 something

জম্বি এর পিতামাতার সন্ধান করুন:

a@SERVER:~$ pstree -p -s 93572

তোমাকে দিবে:

init(1)---cnid_metad(1311)---cnid_dbd(5145)

এই ক্ষেত্রে আপনি এই পিতামাতার প্রক্রিয়াটিকে হত্যা করতে চান না এবং আপনার একটি জম্বি নিয়ে বেশ খুশি হওয়া উচিত তবে তাত্ক্ষণিক পিতামাতার প্রক্রিয়াটি 5145 হত্যা করা থেকে মুক্তি পাওয়া উচিত।

অ্যাসুবুন্টুতে অতিরিক্ত সংস্থানগুলি:


1
আপনার উত্তরে আপনি যে ফলাফলটি দেখান সেটি হ'ল গ্রেপ কমান্ড নিজেই, জম্বি প্রক্রিয়া নয়। পাবলো তার উত্তরে যে একই ভুল-ইন্টারপ্রিটেশন করেছিলেন। নীচে রিনজুইন্ডের উত্তরগুলি প্রকৃতপক্ষে জম্বি প্রক্রিয়াটি অনুসন্ধান করে তাদের তালিকাভুক্ত করে। "অপসারণ"
এফভিডি

pstree -H your_desired_pid -p
গ্রেগ এম

আলোচনায় যুক্ত করার জন্য গ্রেগকে ধন্যবাদ, তবে দয়া করে মনে রাখবেন এটি একটি সহায়তা সাইট, কিছু না বলে কেবল একটি কমান্ড আটকানো বেশিরভাগ লোকেরা এখানে সাহায্যের সন্ধানের জন্য সহায়ক নয়।
ডানকানমু

1
এটি একটি দুর্দান্ত উত্তর! এটি আজও বৈধ! আমি আমার জম্বি প্রক্রিয়াটি সন্ধান করতে এবং কোনও সমস্যা ছাড়াই এর পিতামাতার প্রক্রিয়াটি হত্যা করতে সক্ষম হয়েছি। ধন্যবাদ!
টেরেন্স

1
আপনি যদি pstree ইনস্টল না ps wauxfকরেন, একই জিনিস করেন
জেডিএস

35

এই প্রশ্নটি পুরানো হলেও আমি ভেবেছিলাম সবাই আরও নির্ভরযোগ্য উত্তরের যোগ্য:

ps axo pid=,stat=

এটি দুটি সাদা স্থান-বিস্মৃত কলামগুলি নির্গমন করবে, যার প্রথমটি একটি পিআইডি এবং দ্বিতীয়টি এর রাজ্য।

আমি মনে করি না এমনকি জিএনইউ psসরাসরি রাষ্ট্র দ্বারা ফিল্টার করার কোনও উপায় সরবরাহ করে তবে আপনি নির্ভরযোগ্যতার সাথে এটি করতে পারেনawk

ps axo pid=,stat= | awk '$2~/^Z/ { print }'

আপনার কাছে এখন পিআইডিগুলির একটি তালিকা রয়েছে যা জম্বি। যেহেতু আপনি এই রাজ্যটি জানেন তা এখন আর এটি প্রদর্শন করার দরকার নেই, যাতে এটি ফিল্টার করা যায়।

ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }'

জম্বি পিআইডি-র একটি নতুন লাইন-সীমাবদ্ধ তালিকা দেওয়া।

আপনি এখন এই তালিকায় একটি সাধারণ শেল লুপ দিয়ে পরিচালনা করতে পারেন

for pid in $(ps axo pid=,stat= | awk '$2~/^Z/ { print $1 }') ; do
    echo "$pid" # do something interesting here
done

ps একটি শক্তিশালী সরঞ্জাম এবং এটি থেকে প্রক্রিয়া সম্পর্কিত তথ্য পেতে আপনাকে জটিল কিছু করার দরকার নেই।

(বিভিন্ন প্রক্রিয়াটির অর্থ এখানে রয়েছে - https://unix.stackexchange.com/a/18477/121634 )


2
awkএটি একটি শক্তিশালী সরঞ্জাম যা কেবল পাঠ্যকে বিভক্ত করে না তবে এটির সাথে এটিও মেলে। +1 ... অন্যরা grepযেখানে এটি অপ্রয়োজনীয় এবং ত্রুটিযুক্ত ব্যবহার করেছে।
0xC0000022L

সুতরাং এখন আমার কাছে জম্বি প্রক্রিয়াগুলির তালিকা রয়েছে। আমি কীভাবে তাদের হত্যা করব?
chovy

@ শেভি: এটি নির্ভর করবে তবে সাধারণত পিতামাতাকে হত্যা করা বা সংকেত অন্তর্ভুক্ত থাকে। এখানে অন্যান্য উত্তর এটিতে যান। উপরের দেখানো লুপের মধ্যে থেকে আপনি এইভাবে প্যারেন্ট ps -p "$pid" -opid=,ppid=
পিডটি

আমি যদি পিতা-মাতা এটির সমস্ত সন্তানের প্রক্রিয়া মেরে ফেলব না? আমি কেবল একটি জম্বি প্রক্রিয়াটি হত্যা করতে চাই। আমি পিপিড জানি।
chovy

1
আমি ppid=বিকল্প তালিকায় যুক্ত করার পরামর্শ দিই , তাই পিপিড পাওয়ার জন্য আলাদা কমান্ড ব্যবহার করার দরকার নেই।
ডিঙ-ইয়ে চেন

3

ps aux | awk '{ print $8 " " $2 }' | grep -w Z

থেকে: http://www.cyberciti.biz/tips/killing-zombie-process.html

মন্তব্যগুলি থেকে উন্নত একটি:

for p in $(ps jauxww | grep Z | grep -v PID | awk '{print $3}'); do
    for every in $(ps auxw | grep $p | grep cron | awk '{print $2}'); do
        kill -9 $every;
    done;
done;

যত্নবান যদিও: এটি একটিকে প্রক্রিয়াটি মেরে ফেলে।


এখনও কিছুই ফেরত না। আমার মনে হয় আমার উপায়ও ভুল ছিল না।
পাবলো

দ্বিতীয় উদাহরণটি নরকীয়ভাবে অবিশ্বাস্য এবং পূর্বেরটি অযথা ভারবোস ( ps axo pid=,stat= | awk '$2~/Z/ {print $1}'পরিবর্তে চেষ্টা করুন) try
Sorpigal

3

কম যদিও আরও:

ps afuwwx | less +u -p'^(\S+\s+){7}Z.*'

এর মতো, যে কোনও টিটিটিতে সীমাহীন প্রস্থ সহ একটি ব্যবহারকারীমুখী বিন্যাসে সমস্ত ব্যবহারকারীর প্রক্রিয়াগুলির একটি বন (গাছ) আমাকে দিন এবং উপরের অর্ধেক স্ক্রিনে আমাকে এটি দেখান যেখানে এটি 8 ম কলামে একটি জেড রয়েছে এমন কেসের সাথে মেলে এবং কেন পুরো লাইন হাইলাইট না।

ব্যবহারকারীমুখী ফর্ম্যাটটির অর্থ মনে হচ্ছে: USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMANDসুতরাং বোকচন্দর স্থিতিটি অষ্টম কলামে প্রদর্শিত হবে।

আপনি যদি লাইনের নম্বর চান তবে আপনি Nআগে একটি নিক্ষেপ pকরতে পারেন, এবং Jম্যাচে একটি নক্ষত্র চাইলে একটি। দুর্ভাগ্যক্রমে আপনি যদি Gলাইনটি হাইলাইট না করতে ব্যবহার করেন তবে যে তারকাচিহ্নটি প্রদর্শিত হবে না, যদিও এর Jজন্য স্থান তৈরি করে।

আপনি দেখতে এমন কিছু পেয়ে যাবেন:

…
  root      2919  0.0  0.0  61432  5852 ?      Ss Jan24 0:00 /usr/sbin/sshd -D
  root     12984  0.0  0.1 154796 15708 ?      Ss 20:20 0:00  \_ sshd: lamblin [priv]
  lamblin  13084  0.0  0.0 154796  9764 ?      S  20:20 0:00      \_ sshd: lamblin@pts/0
* lamblin  13086  0.0  0.0  13080  5056 pts/0  Z  20:20 0:00          \_ -bash <defunct>
  lamblin  13085  0.0  0.0  13080  5056 pts/0  Ss 20:20 0:00          \_ -bash
  root     13159  0.0  0.0 111740  6276 pts/0  S  20:20 0:00              \_ su - nilbmal
  nilbmal  13161  0.2  0.0  13156  5004 pts/0  S  20:20 0:00                  \_ -su
  nilbmal  13271  0.0  0.0  28152  3332 pts/0  R+ 20:20 0:00                      \_ ps afuwwx
  nilbmal  13275  0.0  0.0   8404   848 pts/0  S+ 20:20 0:00                      \_ less +u -Jp^(\S+\s+){7}Z.*
…

আপনি এটি অনুসরণ করতে পারেন (এবং এটি সনাক্ত করতে পারে যদি আপনার টার্মিনালটি ইউ-ইউনিকোড বা -এ এসসিআই পছন্দ করে):

pstree -psS <PID LIST>

বা কেবল, আপনি জানেন, lessশ্রেণিবদ্ধ মাধ্যমে গাছ / বন অনুসরণ করতে আপ-তীর ব্যবহার করুন ; যা আমি "কম বেশি বেশি" পদ্ধতির সাথে সুপারিশ করছিলাম।


0

আমি আপনাকে এই আদেশটি পরামর্শ দিচ্ছি:

ps aux | awk '"[Zz]" ~ $8 { printf("%s, PID = %d\n", $8, $2); }'

এর auxবাইরে স্ট্রিংগুলি ব্যবহার এবং মুং করা অকারণে বিশ্বাসযোগ্য নয় যখন আপনি -oঠিক কী চান ব্যবহার করতে এবং অনুরোধ করতে পারেন। ps ax -o pid=,stat= | awk '$2 ~ "[Zz]" { printf("%s, PID = %d\n", $2, $1); }'পরিবর্তে ব্যবহার করুন।
সোর্পিগাল

-1

প্রক্রিয়া জোম্বিগুলি তালিকাভুক্ত করতে, এই আদেশটি ব্যবহার করে দেখুন:

ps j | awk '$7 ~ "Z"'

$7আপনার অপারেটিং সিস্টেমের উপর নির্ভর করে আপনার পরিবর্তন করতে হবে ।

এটি তাদের পিতামাতার প্রক্রিয়া আইডির তালিকাও ফিরিয়ে দেবে PPID)

জোম্বিদের হত্যা করার চেষ্টা করার জন্য (উপরের কমান্ডটি পরীক্ষা করার পরে) চেষ্টা করুন:

kill -9 $(ps j | awk 'NR>1 && $7 ~ "Z" {print $2}')

তাদের পিতামাতাদের সনাক্ত করতে, এর সাথে চেষ্টা করুন pstree:

$ ps j | awk 'NR>1 && $7 ~ "T" {print $2}' | xargs -L1 pstree -sg
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2430)
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2431)
systemd(1)───sshd(1036)───sshd(2325)───sshd(2325)───bash(2383)───zombie(2432)

এর জন্য jবিন্যাসের বাইরে এক কলামটি সরিয়ে ফেলা অবধারিত less ব্যবহার করুন -oকি আপনি যদি এর পরিবর্তে চান তা নির্বাচন করতে।
সরপিগাল

2
ps jসিস্টেমে সমস্ত প্রক্রিয়া মুদ্রণ করে না। এটি কেবলমাত্র বর্তমান ব্যবহারকারী প্রোকে তালিকাবদ্ধ করে (বিএসডি কাজের শৈলীতে) যাতে এটি জম্বি প্রক্রিয়াগুলি মিস করতে পারে।
আরিফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.