0 কে হত্যা আসলে কি করে? [বন্ধ]


22

ইন man page, এটি বলে:

kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
 pid... Specify the list of processes that kill should signal.  Each pid can be one of five things:
          0      All processes in the current process group are signaled

এবং আমি এ জাতীয় চেষ্টা করেছি:

$ man kill &
[1] 15247
$
[1]+  Stopped                 man kill
$ kill 0
$ ps
15247 pts/41   00:00:00 man

এখানে 0হিসাবে ব্যবহৃত হয় pid। আমি যেমন বুঝতে পেরেছি, kill 0বর্তমান প্রক্রিয়াতে সমস্ত প্রক্রিয়া মেরে ফেলবে, যার মধ্যে রয়েছে pid15247। যাইহোক, এটি এই উদাহরণে কিছুই করেনি। কীভাবে এটি ব্যবহার করবেন সে সম্পর্কে কারও ধারণা আছে?


এটি SIGTERMপ্রক্রিয়াটিতে একটি প্রেরণ করে, যা এটি করেছে। manকমান্ড তা উপেক্ষা করতে চেয়েছেন।
জর্দানম

5
@ জোর্ডানম, না একটি ইন্টারেক্টিভ শেল দ্বারা শুরু করা একটি কাজের শেলের চেয়ে আলাদা প্রক্রিয়া গ্রুপ রয়েছে। শেলটি কীভাবে এটি অগ্রভাগ এবং পটভূমিতে রাখতে পারে। ps -jপ্রক্রিয়া গ্রুপগুলি দেখতে দেখুন ।
স্টাফেন চেজেলাস

1
এই প্রশ্নটি আসলে সুপার-ইউজার প্রশ্নের একটি অনুলিপি আসলে 0 কে কী খুন করে? (যা স্ট্যাকওভারফ্লো থেকে স্থানান্তরিত হয়েছিল)। এছাড়াও সম্পর্কে প্রশ্ন দেখুন kill -0(নোট ড্যাশ), যা একটি ভিন্ন বিষয়, Stackoverflow এ এবং এখানে Unix.SE উপর
অ্যাডাম কাটজ

উত্তর:


27

যেমনটি বলা হয়েছে, এটি কলারের প্রক্রিয়া গ্রুপের সমস্ত সদস্যকে সংকেত প্রেরণ করে।

প্রক্রিয়া গোষ্ঠীগুলি শেলটিতে কাজের নিয়ন্ত্রণ প্রয়োগ করতে ব্যবহৃত হয় (এগুলি অন্যান্য জিনিসের জন্য ব্যবহার করা যেতে পারে, তবে ইন্টারেক্টিভ শেল জব নিয়ন্ত্রণ তাদের অস্তিত্বের মূল কারণ)।

আপনি লক্ষ্য করবেন যে আপনি টাইপ করার সময় Ctrl-C, বর্তমান কাজগুলির সমস্ত প্রক্রিয়া মারা যায়, কেবল সেগুলিই শুরু করে না। এছাড়াও, এটি পটভূমির কাজগুলিকে হত্যা করে না।

প্রক্রিয়া গ্রুপ দ্বারা এটি অর্জন করা হয়। একটি কাজ শেল দ্বারা শুরু হওয়া প্রক্রিয়াগুলির একটি গোষ্ঠী যা শেলটি পটভূমি বা সম্মুখভাগে স্থাপন করতে পারে (টার্মিনালের অগ্রভাগ প্রক্রিয়া গোষ্ঠী হিসাবে সেট করা হয়) এবং সামগ্রিকভাবে হত্যা করতে পারে।

আপনি ইচ্ছা করলে প্রক্রিয়াটি গ্রুপ আইডি এবং অধিবেশন আইডি সম্পর্কে জানতে পারেন ps -j( jএর জন্য Job নিয়ন্ত্রণ)।

পিজিআইডি-র প্রক্রিয়া গোষ্ঠীটি খতম করতে $x, আপনি এটি করুন:

kill -- "-$x"

kill 0 কলারের প্রক্রিয়া গোষ্ঠীকে হত্যা করে।

মনে রাখবেন যে আপনি যদি /bin/kill 0এটি করেন:, শেলটি সেই killআদেশটি কার্যকর করতে একটি নতুন কাজ শুরু করবে , সুতরাং killকেবলমাত্র নিজেকেই হত্যা করবে।

killসাধারণত শেল অন্তর্নির্মিত যদিও killএটি শেলের প্রক্রিয়া গোষ্ঠীকে হত্যা করে।

যাইহোক, শেলটি ইন্টারঅ্যাকটিভ হলে এটি প্রক্রিয়া পরিচালনার প্রক্রিয়া গোষ্ঠীগুলি হয়, সুতরাং শেলের প্রক্রিয়া গোষ্ঠীতে সাধারণত কোনও প্রক্রিয়া নেই। শেল দ্বারা শুরু সমস্ত প্রক্রিয়া অন্যান্য প্রক্রিয়া গোষ্ঠীতে রয়েছে:

$ sleep 1000 &
[1] 22746
$ ps -j
  PID  PGID   SID TTY          TIME CMD
22735 22735 22735 pts/23   00:00:00 zsh
22746 22746 22735 pts/23   00:00:00 sleep
22749 22749 22735 pts/23   00:00:00 ps

উপরে, sleepএবং psদুটি পৃথক প্রক্রিয়া গ্রুপে রয়েছে, একটি পটভূমিতে, একটি অগ্রভাগে এবং সেগুলি শেলের প্রক্রিয়া গ্রুপ থেকে পৃথক।

আপনি যদিও এটি করতে পারেন:

(man kill & sleep 1; ps -j; kill 0)

ইন্টারেক্টিভ শেলটি এই সাবশেলের জন্য একটি নতুন প্রক্রিয়া গোষ্ঠী শুরু করবে এবং সাবশেল এবং ম্যান (এবং আপনার পেজার, গ্রাফ ... এর মতো লোক দ্বারা শুরু করা অন্যান্য কমান্ড) একই প্রক্রিয়া গ্রুপে থাকবে, সুতরাং kill 0সেখানে কাজ করবে। ( sleepউপরেরটি হল পেজারটি শুরু করার জন্য পর্যাপ্ত সময় দেওয়া যাতে এটি ps -jমারার আগে আমরা এটি আউটপুটে দেখতে পারি)।


kill -- -$xবাস্তবে bash: kill: (-63531) - No such process5.0.11 (1) বাশ-এ ম্যাকস 10.14-এ দয়া করে বলেছেন তবে এটি নিশ্চিত যে প্রক্রিয়াটি বিদ্যমান এবং চলছে। pkill -Pভাল কাজ করে
kyb

1
@kyb $ x অবশ্যই প্রক্রিয়া আইডি নয় একটি প্রক্রিয়া গ্রুপ আইডি হতে হবে। আউটপুট দেখুন ps -jpgids সম্পর্কে জানতে
Stéphane Chazelas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.