কিন্ডার / কোমল / সূক্ষক সমতুল্য বিকল্প কিল্ল (যেমন "শেষ")?


17

আমি কীভাবে killallতার চেয়ে আরও নম্রভাবে একই নাম দিয়ে সমস্ত প্রক্রিয়া শেষ করব ? আমি প্রক্রিয়াগুলিতে বাধা দিতে চাই না, তবে তাদের যথাযথভাবে ছাড়ার জন্য সময় দিন।


আরো দেখুন:

আমি কীভাবে উবুন্টুতে প্রক্রিয়াগুলিকে হত্যা করব?

সিস্টেম মনিটরে, কিল প্রসেস এবং শেষ প্রক্রিয়াটির মধ্যে পার্থক্য কী?

কেন কিলাল (কখনও কখনও?) দুবার প্রয়োগ করা দরকার?

TL; ড


1
এবং আপনার প্রশ্ন হয়?
পাইলট 6

@ পাইলট re পুনরায় বাক্যযুক্ত : কিল্লার "নরম" বিকল্প কী?
বাদুড় সম্পর্কে ন্যাটি

1
"নরম" কী?
পাইলট 6

উত্তর:


43

1. `কিল্লা ইতিমধ্যে দুর্দান্ত (সাইনটারম)

killallডিফল্টরূপে প্রেরণ SIGTERM। এটি ইতিমধ্যে দুর্দান্ত পদ্ধতি যা অ্যাপ্লিকেশনগুলিকে নিজের পরে পরিষ্কার করার সুযোগ দেয়। "ইতিমধ্যে মারা যান, এখনই!" পদ্ধতির একটি SIGKILLসংকেত প্রেরণ করা হয় , যার জন্য এটি নির্দিষ্টকরণের বিকল্প হিসাবে প্রয়োজন killall। থেকে GNU C লাইব্রেরি: সমাপন সংকেত :

ম্যাক্রো: int SIGTERM

[...] বিনীতভাবে কোনও প্রোগ্রামটি সমাপ্ত করতে বলার স্বাভাবিক উপায় It


২. সিস্টেম মনিটরের "সমাপ্তি প্রক্রিয়া" সমানভাবে দুর্দান্ত (সাইন্টারএমও)

আপনি জিনোম সিস্টেম মনিটর সম্পর্কে একটি প্রশ্নের সাথে লিঙ্ক করেন। এটি SIGTERMতার "শেষ প্রক্রিয়া" ক্রিয়াকলাপের জন্যও ব্যবহার করে (এবং আমি বুঝতে পারি যে আমি এই প্রশ্নের উত্তরের বিরোধিতা করছি)। নিজেকে যাচাই করার জন্য আপনি উত্স কোডটিতে এটি পেতে পারেন:

তথ্য / মেনু.উই :

<item>
  <attribute name="label" translatable="yes">_End</attribute>
  <attribute name="action">win.send-signal-end</attribute>
  <attribute name="accel">&lt;Primary&gt;e</attribute>
  <attribute name="target" type="i">15</attribute>
</item>

15 টি এখানে সিগন্যাল নম্বর। সিগন্যাল 15 হয় SIGTERM। এবং SIGTERMঅন্যান্য প্রশ্ন জিজ্ঞাসা করা এবং উত্তর দেওয়ার আগে সিস্টেম মনিটর ভাল ব্যবহার করেছে ।


প্রযুক্তিগত সংযোজন (একটি মন্তব্যের প্রতিক্রিয়া হিসাবে)

গিথুব প্রতিনিধিত্বের দিকে তাকালে git blame, জিনোম সিস্টেম মনিটরের উত্স কোডে সংকেতগুলি বানান কীভাবে করা হয়েছে তার জন্য এখানে পরিবর্তনগুলি করা হয়েছে:

383007f2 24 জুলাই 2013 GAction পরামিতি সহ সিগন্যাল প্রেরণের জন্য নকল কোড প্রতিস্থাপন
0e766b2d 18 জুলাই 2013 পোর্ট প্রক্রিয়া পপআপ মেনু GAction
97674c79 3 অক্টোবর 2012 প্রোডাটা কাঠামো থেকে মুক্তি পান
38c5296c 3 জুলাই 2011 উত্স ফাইলগুলিতে ইন্ডেন্টেশন ইউনিফর্ম তৈরি করুন।

এর মধ্যে কোনোটিই থেকে পরিবর্তিত SIGQUITকরা SIGTERM, এবং যে গত এক থেকে সামনে লিঙ্ক প্রশ্ন জিজ্ঞাসা হয়েছিল।


7
উত্স কোড উল্লেখ করার জন্য +1! ("প্রচলিত জ্ঞান" যেমনটি ছিল তেমনি বিরোধিতা করার জন্য +2)
বাদামি সম্পর্কে

ভাল, আপনি উত্তরের সাথে বিরোধিতা করছেন তা উল্লেখ করার আগে: আপনি কি সোর্স কোডের সমস্ত সংস্করণ ব্যবহার করেছেন কিনা তা পরীক্ষা করে দেখেছেন 15? এটি কোনও এক সময় পরিবর্তিত হতে পারে তাই পুরানো সংস্করণটির ক্ষেত্রে পুরানো উত্তরটি 100% সঠিক হতে পারে।
বাকুরিউ

1
@ বাকুরিউ আমি এই উত্তরটির যে কোনওভাবেই বিরোধিতা করি না, তবে যথাযথ বিষয়, আমি পরের বার যা পারব তা পরীক্ষা করে দেখার চেষ্টা করব।
এইচডিভি

উত্স গিট গাছে @ বাকুরিউ, git grep 'SIGQUIT'কিছুই প্রকাশ করেন না। সংকেত সম্পর্কিত কোনও কিছুই পাওয়া যায় git grep '>3<'না। আমি উপসংহারে পৌঁছেছি যে সম্ভবত সম্ভবত জিনোম-সিস্টেম-মনিটর ব্যবহার করেনি SIGQUIT
Ruslan

@ রুসলান git grepকেবলমাত্র বর্তমান গাছটি অনুসন্ধান করে, পুরো ইতিহাস নয়। আমি git blameআরও গভীর খনন করতে (আসলে গিথুব সমতুল্য) ব্যবহার করেছি , তবে এখনও কিছুই নেই।
এইচডিভি

5

@Hvd এর উত্তরটি মূলত সঠিক। এটিকে আরও ব্যাক আপ করার জন্য, আপনি যখন আপনার কম্পিউটারটি বন্ধ করে দিচ্ছেন তখন প্রক্রিয়াটি initপ্রথমে SIGTERMপ্রসেসগুলিতে প্রেরণ করবে , তারপরে একটি বিলম্বের পরে প্রেরণ করবে SIGKILLযদি তারা ইতিমধ্যে না উপস্থিত থাকে। প্রক্রিয়াগুলি হ্যান্ডেল / উপেক্ষা করতে পারে না SIGKILL

যদিও আরও কিছুটা বিশদ দেওয়ার জন্য, আসল উত্তরটি হ'ল যে প্রোগ্রামটি এটি পরিচালনা করে তা নিশ্চিত করে আপনার জানার কোনও উপায় নেই। SIGTERMবিনীতভাবে কোনও প্রোগ্রাম ছাড়তে বলার জন্য ব্যবহার করা সর্বাধিক সাধারণ সিগন্যাল, তবে সমস্ত সিগন্যাল হ্যান্ডলিং সিগন্যাল সহ কিছু করা প্রোগ্রামের উপর নির্ভর করে।

এটিকে অন্যভাবে উত্তর দেওয়ার জন্য, যদি আপনার কাছে @ জোস বা @ অ্যালেক্সগ্রিগ দ্বারা লিখিত একটি প্রোগ্রাম থাকে তবে তারা সম্ভবত পরিচালনা করে SIGQUITতবে সম্ভবত তা করা হয় না SIGTERM, এবং তাই পাঠানো SIGTERMকম "নরম" হতে পারে SIGQUIT

আমি কিছু কোড লিখেছি যাতে আপনি নিজের সাথে এটি খেলতে পারেন। নীচের হিসাবে সংরক্ষণ করুন signal-test.c, তারপরে সংকলন করুন

gcc -o signal-test signal-test.c

তারপরে আপনি এটিকে চালাতে পারেন ./signal-testএবং দেখুন যখন আপনি এর সাথে বিভিন্ন সংকেত প্রেরণ করেন তখন কী ঘটে killall -s <signal>

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

int flag = 0;

void handle_signal(int s)
{
    flag = s;
}

int main(int argc, char *argv[])
{
    signal(SIGTERM, handle_signal);
    signal(SIGQUIT, handle_signal);

    while(flag == 0){
        sleep(1);
    }
    printf("flag is %d\n", flag);
    return flag;
}

যেমনটি দাঁড়িয়েছে, কোডটি سگরটার এবং সিকুইট উভয়কে কৌতুকপূর্ণভাবে পরিচালনা করে। আপনি সিগন্যাল হ্যান্ডলারটি সরাতে লাইনগুলি signal(SIG...( লাইনের //শুরুতে একটি ব্যবহার করে) মন্তব্য করার চেষ্টা করতে পারেন, তারপরে চালান এবং আবার সিগন্যাল প্রেরণ করুন। আপনি এই বিভিন্ন আউটপুট দেখতে সক্ষম হতে হবে:

$ ./signal-test
Terminated

$ ./signal-test
Quit (core dumped)

$ ./signal-test
flag is 15

$ ./signal-test
flag is 3

আপনি সংকেতগুলি পরিচালনা করেন কিনা তা নির্ভর করে।

আপনি সিগন্যাল উপেক্ষা করার চেষ্টা করতে পারেন:

signal(SIGTERM, SIG_IGN);

যদি আপনি এটি করেন তবে প্রেরণ SIGTERMকিছুই করবে না, SIGKILLপ্রক্রিয়াটি শেষ করতে আপনাকে ব্যবহার করতে হবে।

আরও বিশদ man 7 signal। নোট করুন যে এইভাবে ব্যবহার করা signal()অ-বহনযোগ্য হিসাবে বিবেচিত হয় - এটি বিকল্পের তুলনায় অনেক সহজ!

অন্য একটি ছোটখাটো পাদটীকা - সোলারিস killallসমস্ত প্রক্রিয়া হত্যা করার চেষ্টা করে। তাদের সবাই. আপনি যদি এটি রুট হিসাবে চালনা করেন তবে আপনি অবাক হতে পারেন :)


1
এটি আমার পছন্দের কারণগুলির মধ্যে একটি pkill। অন্য কারণটি হ'ল এটির সাথে এটি যুক্ত হয় pgrepযা সঠিকভাবে কোন প্রক্রিয়াগুলি মেরে ফেলা হবে তা যাচাই করা সহজ করে তোলে এবং যার মধ্যে নিজে থেকে এর চেয়ে ভাল শব্দগুলির মিল রয়েছে ps | grep
র্যান্ডম 832

1

"সব শেষ" হবে killall -s SIGQUIT [process name]। আপনি যদি অভিনব সমাধান চান, সংজ্ঞা দিন alias endall='killall -s SIGQUIT'


13
SIGQUITপ্রক্রিয়াটি তৈরির মতো abort(3): এটি কোর ডাম্প করে এবং তারপরে প্রক্রিয়াটিকে মেরে ফেলে। এটি কোনওভাবেই ভাল / ধীরে ধীরে / কিন্ডার নয় SIGTERMযার চেয়ে ডিফল্ট killall
Ruslan

3
এমন একটি প্রক্রিয়ার জন্য যা সংকেতগুলি পরিচালনা করে, SIGQUIT(বা আরও ভাল SIGINT) এর চেয়ে বেশি 'নরমভাবে' চিকিত্সা করা যেতে পারে SIGTERMতবে এটি প্রয়োগ পর্যন্ত to আনহ্যান্ডলড, এগুলির যে কোনও তত্ক্ষণাত অবসান ঘটায়।
আর .. গীটহাব বন্ধ করুন ICE

1
এটি আপনার দুর্দান্ত ডিস্কের মাধ্যমে মূল ফাইলগুলি পরিষ্কার করা পছন্দ করে, এটি একটি দুর্দান্ত ধারণা।
নাট এলেডেজ

2
@ কুইকস: সিগন্যাল প্রতি একটি জিনিস পরিবর্তিত হয় তা হ'ল এটি কোনও মূল ফাইল তৈরি করে বা না ডিফল্ট ক্রিয়ায় (যখন অ্যাপ্লিকেশন দ্বারা পরিচালিত হয় না)। মূল ফাইলগুলি উত্পন্ন না করে এমন সংকেত ব্যবহার করা সম্ভবত পছন্দনীয়।
আর .. গীটহাব বন্ধ করুন ICE

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