কৃপণভাবে শাটডাউন প্রক্রিয়াগুলিতে আমি কোন ক্রমে সংকেত প্রেরণ করব?


90

একটি মন্তব্য উপর এই উত্তরটি অন্য প্রশ্ন , মন্তব্যকারী বলেছেন:

একেবারে প্রয়োজন না হলে কিল -9 ব্যবহার করবেন না! সাইন কিল আটকাতে পারে না যাতে নিহত প্রোগ্রামটি কোনও অচলত ফাইলগুলি মুছতে কোনও শাটডাউন রুটিন চালাতে না পারে। প্রথমে HUP (1), তারপরে INT (2), তারপরে কোট (3) চেষ্টা করুন

আমি নীতিগতভাবে এ বিষয়ে একমত SIGKILL, তবে বাকিটি আমার কাছে সংবাদ। প্রদত্ত ডিফল্ট দ্বারা প্রেরিত সংকেত যে killনেই SIGTERM, আমি এটা একটি অবাধ প্রক্রিয়ার সুতনু শাটডাউন জন্য সর্বাধিক সাধারণভাবে প্রত্যাশিত সংকেত আশা করবে। এছাড়াও, আমি SIGHUPঅ-সমাপ্তির কারণে যেমন ডেমোনকে "আপনার কনফিগার ফাইলটি পুনরায় পড়ুন" বলার মতো ব্যবহার করতে দেখেছি । এবং এটি আমার কাছে মনে হয় SIGINT(আপনি একইভাবে সিআরটিএল-সি দিয়েছিলেন ঠিক একই বিঘ্নিত)? এটি যতটা হওয়া উচিত ততটা ব্যাপকভাবে সমর্থিত নয়, বা অবিরতভাবে অবসান ঘটিয়েছে।

SIGKILLএটি একটি সর্বশেষ অবলম্বন - প্রদত্ত কোনও সংকেত এবং কোন ক্রম অনুসারে আপনি যতোটা সম্ভব নিখুঁতভাবে বন্ধ করে দেওয়ার জন্য কোনও স্বেচ্ছাসেবী প্রক্রিয়ায় প্রেরণ করা উচিত?

আপনি যদি পারেন তবে সমর্থনকারী তথ্য (ব্যক্তিগত পছন্দ বা মতামতের বাইরে) বা রেফারেন্স সহ আপনার উত্তরগুলি দৃstan় করুন।

দ্রষ্টব্য: আমি বিশেষত সেরা অভ্যাসগুলিতে আগ্রহী যার মধ্যে বাশ / সাইগউইনের বিবেচনা অন্তর্ভুক্ত রয়েছে।

সম্পাদনা: এখনও অবধি, কেউ INT বা কোট উল্লেখ করেনি বলে মনে হয় এবং HUP এর সীমাবদ্ধ উল্লেখ নেই। এগুলি একটি সুশৃঙ্খল প্রক্রিয়া-হত্যার অন্তর্ভুক্ত করার কোনও কারণ আছে কি?


4
আপনাকে যদি সত্যিই কোনও প্রক্রিয়া হত্যার জন্য সিগকলের অবলম্বন করতে হয় তবে আমি প্রোগ্রামটিতে এটি একটি বাগ হিসাবে বিবেচনা করব।
সিগজুইস

উত্তর:


121

SIGTERM একটি অ্যাপ্লিকেশনকে অবসান করতে বলে। অন্যান্য সংকেতগুলি অ্যাপ্লিকেশনটিকে অন্যান্য জিনিসগুলি বলে যা যা শাটডাউনের সাথে সম্পর্কিত নয় তবে কখনও কখনও একই ফলাফল হতে পারে। সেগুলি ব্যবহার করবেন না। আপনি যদি কোনও অ্যাপ্লিকেশন বন্ধ করে দিতে চান তবে এটিতে বলুন। এটিকে বিভ্রান্তিকর সংকেত দেবেন না।

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

সংকেতগুলির আসল অর্থ কী তা সম্পর্কে আরও তথ্যের জন্য, শিহরণ দেখুন (2)। "ডিফল্ট অ্যাকশন" কে "বিবরণ" দিয়ে বিভ্রান্ত করবেন না, তারা একই জিনিস নয়।

প্রক্রিয়াটির একটি ইন্টারেক্টিভ "কীবোর্ড বিঘ্নিত" সিগন্যাল করতে সাইন ইন ব্যবহৃত হয়। কিছু প্রোগ্রাম টার্মিনাল ব্যবহারকারীদের উদ্দেশ্যে একটি বিশেষ উপায়ে পরিস্থিতি পরিচালনা করতে পারে।

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

কর্কেল থেকে প্রক্রিয়াটি জোর করে অপসারণ করতে সিগ্কিল ব্যবহার করা হয়। এটি এই অর্থে বিশেষ যে এটি আসলে প্রক্রিয়াটির সংকেত নয়, বরং সরাসরি কার্নেল দ্বারা ব্যাখ্যা করা যায়।

সিগ্কিল পাঠাবেন না। সাইনकिल অবশ্যই স্ক্রিপ্টগুলির মাধ্যমে কখনই প্রেরণ করা উচিত নয়। যদি অ্যাপ্লিকেশনটি SIGTERM পরিচালনা করে তবে এটি পরিষ্কারের জন্য এক সেকেন্ড সময় নিতে পারে, এটি এক মিনিট সময় নিতে পারে , এটি এক ঘন্টা সময় নিতে পারে । অ্যাপ্লিকেশনটি শেষ হওয়ার আগে তৈরি করতে হবে তার উপর নির্ভর করে। অ্যাপ্লিকেশনটির ক্লিনআপ সিকোয়েন্সটি " অনুমান " করে এমন কোনও যুক্তি যথেষ্ট পরিমাণ সময় নিয়েছে এবং এক্স সেকেন্ডের পরে শর্টকাট বা সিক্কিল হওয়া দরকার কেবল সাধারণ ভুল

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

যদিও অর্ধেক বিশ্ব অন্ধভাবে 5 সেকেন্ড পরে সিগ্কিল পাঠায় এটি করা এখনও মারাত্মক ভুল কাজ।


13
আপনি ঠিক বলেছেন যে সেখানে সিক্কিলের প্রচুর অপব্যবহার হয়েছে। তবে এটি ব্যবহারের জন্য একটি সময় এবং জায়গা রয়েছে, এমনকি কোনও স্ক্রিপ্ট থেকেও। অনেকগুলি অ্যাপ্লিকেশন সিগনটারকে ফাঁদে ফেলে এবং এক সেকেন্ডেরও কম সময়ে বা কেবল কয়েক সেকেন্ডের মধ্যে মনোযোগ দিয়ে প্রস্থান করে এবং এর মধ্যে একটি এখনও 30 সেকেন্ড পরে চলছে কারণ এটি বন্ধ হয়ে গেছে।
dwc

4
@ ডাব্লুসি: এটি এক ঘন্টার জন্য একবার চালিয়ে দেওয়ার চেষ্টা করুন। যদি এটি না মারা যায় তবে এটি "আবদ্ধ" এবং হয় এটি ঠিক করুন, বা অলস হয়ে থাকুন এবং ভবিষ্যতে কিছু সময়ের পরে এটি সাইন করুন। মনে রাখবেন যে আপনি সম্ভবত জিনিসগুলি কলুষিত করছেন এবং মনে রাখবেন যে এটি এমন কিছু নয় যা আপনার "ডিফল্টরূপে" করা উচিত।
লুুনাথ

4
@ লুনাথ: আশা করি আপনি কিছু মনে করবেন না, উত্তরটি আরও সরাসরি এবং পরিষ্কারভাবে প্রশ্ন থেকে অনুসরণ করার জন্য আমি আপনার অনুচ্ছেদগুলি পুনরায় সাজিয়েছি। অ্যান্টি-সিগিল-র‌্যান্ট ভাল জিনিস, তবে একটি গৌণ বিষয়। একটি চমৎকার এবং শিক্ষাগত উত্তরের জন্য আবার ধন্যবাদ।
সিস্টেম PAUSE

8
সিগ্কিল পাঠাবেন না। কখনও। ঠিক সরল ভুল। সত্যি? এমনকি যদি আপনার সিস্টেম ইতিমধ্যে অসীম লুপগুলির জন্য ধন্যবাদ জ্বলছে। শুভকামনা। -1
কনসোলবক্স

//, আপভোটিং এটি হাস্যকর।
নাথান বাসানিজ

18

সংক্ষিপ্ত উত্তর : SIGTERM30 সেকেন্ড পরে, পাঠান SIGKILL। এটি হ'ল প্রেরণ করুন SIGTERM, কিছুক্ষণ অপেক্ষা করুন (এটি প্রোগ্রাম থেকে প্রোগ্রামে পরিবর্তিত হতে পারে, আপনি আপনার সিস্টেমটি আরও ভাল জানেন তবে 5 থেকে 30 সেকেন্ডই যথেষ্ট a কোনও মেশিন বন্ধ করার সময় আপনি দেখতে পাবেন যে এটি স্বয়ংক্রিয়ভাবে 1'30s পর্যন্ত অপেক্ষা করবে)। তাড়াহুড়া কেন, সর্বোপরি?), তারপর প্রেরণ করুন SIGKILL

যুক্তিসঙ্গত উত্তর : SIGTERM, SIGINT, SIGKILL এই যথেষ্ট বেশী। প্রক্রিয়া খুব সম্ভবত আগে শেষ হবে SIGKILL

লং উত্তর : SIGTERM, SIGINT, SIGQUIT, SIGABRT,SIGKILL

এটি অপ্রয়োজনীয়, তবে কমপক্ষে আপনি আপনার বার্তা সম্পর্কিত প্রক্রিয়াটি বিভ্রান্ত করছেন না। এই সব সংকেত না মানে আপনি প্রক্রিয়া কি করছে এবং প্রস্থান করা হয় বন্ধ করতে চান।

এই ব্যাখ্যা থেকে আপনি যে উত্তরটি বেছে নিচ্ছেন তা বিবেচনা করুন না, তা মনে রাখবেন!

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

সুতরাং, আপনাকে অবশ্যই নিজেকে একজন প্রোগ্রামার হিসাবে ভাবতে হবে। আপনি কি কোনও ফাংশন হ্যান্ডলারকে কোড করার জন্য বলবেন SIGHUPযে কোনও কিছুর সাথে সংযোগযুক্ত একটি প্রোগ্রামটি ছেড়ে দিতে, বা আপনি আবার সংযোগের চেষ্টা করার জন্য লুপ করবেন? এখানেই মূল প্রশ্ন! এ কারণেই কেবল সংকেত প্রেরণ করা গুরুত্বপূর্ণ যার অর্থ আপনার উদ্দেশ্য কী।

প্রায় বোকা দীর্ঘ উত্তর :

টেবিল বেলোতে প্রাসঙ্গিক সংকেত রয়েছে এবং প্রোগ্রামটি তাদের পরিচালনা না করে এমন ক্ষেত্রে ডিফল্ট ক্রিয়া রয়েছে।

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

তারকাচিহ্ন (*) সহ সংকেতগুলি প্রস্তাবিত নয় । এগুলি সম্পর্কে গুরুত্বপূর্ণ বিষয়টি হ'ল এটি কখন কী করার প্রোগ্রাম করা হয়েছে তা আপনি কখনই জানেন না। বিশেষ SIGUSR! এটি সর্বনাশ শুরু করতে পারে (এটি কোনও প্রোগ্রামারের জন্য তিনি / সে যা চান তাই করুন এটি একটি নিখরচায় সংকেত!)। তবে, যদি পরিচালনা না করা হয় বা সম্ভাব্য ক্ষেত্রে এটি সমাপ্তির জন্য পরিচালিত হয়, তবে প্রোগ্রামটি শেষ হবে।

সারণীতে, একটি মূল ডাম্পের সমাপ্তি এবং উত্পন্ন করার জন্য ডিফল্ট বিকল্পগুলির সংকেতগুলি শেষের দিকে খুব আগে রেখে দেওয়া হয়েছে SIGKILL

Signal     Value     Action   Comment
----------------------------------------------------------------------
SIGTERM      15       Term    Termination signal
SIGINT        2       Term    Famous CONTROL+C interrupt from keyboard
SIGHUP        1       Term    Disconnected terminal or parent died
SIGPIPE      13       Term    Broken pipe
SIGALRM(*)   14       Term    Timer signal from alarm
SIGUSR2(*)   12       Term    User-defined signal 2
SIGUSR1(*)   10       Term    User-defined signal 1
SIGQUIT       3       Core    CONTRL+\ or quit from keyboard
SIGABRT       6       Core    Abort signal from abort(3)
SIGSEGV      11       Core    Invalid memory reference
SIGILL        4       Core    Illegal Instruction
SIGFPE        8       Core    Floating point exception
SIGKILL       9       Term    Kill signal

তারপর আমি এই জন্য সুপারিশ করবে প্রায় মূঢ় দীর্ঘ উত্তর : SIGTERM, SIGINT, SIGHUP, SIGPIPE, SIGQUIT, SIGABRT,SIGKILL

এবং অবশেষে,

অবশ্যই বোকা দীর্ঘ দীর্ঘ উত্তর :

বাড়িতে এটি চেষ্টা করবেন না।

SIGTERM, SIGINT, SIGHUP, SIGPIPE, SIGALRM, SIGUSR2, SIGUSR1, SIGQUIT, SIGABRT, SIGSEGV, SIGILL, SIGFPEএবং কিছুই, কাজ যদি SIGKILL

SIGUSR2আগে চেষ্টা করা উচিত SIGUSR1কারণ প্রোগ্রামটি যদি সংকেতটি পরিচালনা না করে তবে আমরা আরও ভাল। এবং SIGUSR1যদি এটির মধ্যে কেবল একটির পরিচালনা করে তবে এটি পরিচালনা করার পক্ষে এটি আরও অনেক বেশি more

বিটিডাব্লু, কেআইএলএল : SIGKILLঅন্য উত্তর যেমনটি বলেছে তেমন কোনও প্রক্রিয়া প্রেরণ করা ভুল নয় । আচ্ছা, ভাবুন আপনি shutdownকমান্ড পাঠালে কী হয় ? এটি চেষ্টা করবে SIGTERMএবং SIGKILLকেবলমাত্র আপনি কেন মনে হয় যে বিষয়টি? এবং কেন আপনার অন্য কোনও সিগন্যালের দরকার হয়, যদি খুব shutdownকমান্ড কেবল এই দুটি ব্যবহার করে?


এখন, দীর্ঘ উত্তরের দিকে ফিরে , এটি একটি দুর্দান্ত অনলাইনার:

for SIG in 15 2 3 6 9 ; do echo $SIG ; echo kill -$SIG $PID || break ; sleep 30 ; done

এটি সিগন্যালের মধ্যে 30 সেকেন্ডের জন্য ঘুমায়। কেন অন্যথায় আপনি একটি প্রয়োজন হবে oneliner ? ;)

এছাড়াও, প্রস্তাবিত: যুক্তিসঙ্গত উত্তর15 2 9 থেকে কেবল সংকেত দিয়ে চেষ্টা করুন ।

সুরক্ষা : echoআপনি যেতে প্রস্তুত হলে দ্বিতীয়টি সরিয়ে দিন । আমি এটিকে অনলাইনকারীদেরdry-run জন্য বলি । সর্বদা এটি পরীক্ষা করার জন্য ব্যবহার করুন।


স্ক্রিপ্ট হত্যার

আসলে আমি এই প্রশ্নে এতটাই আগ্রহী ছিলাম যে ঠিক করার জন্য আমি একটি ছোট স্ক্রিপ্ট তৈরি করার সিদ্ধান্ত নিয়েছি। দয়া করে এটি ডাউনলোড করতে নির্দ্বিধায় (ক্লোন) এখানে:

কিলগ্র্যাসিফিউলি রিপোজিটরিতে গিটহাব লিঙ্ক


8

সাধারণত আপনি SIGTERMহত্যার ডিফল্ট, প্রেরণ করতেন । এটি কোনও কারণে ডিফল্ট। কেবলমাত্র যদি কোনও প্রোগ্রাম যুক্তিসঙ্গত সময়ে শাটডাউন না করে তবে আপনার অবলম্বন করা উচিত SIGKILL। তবে মনে রাখবেন যে SIGKILLপ্রোগ্রামটি দিয়ে জিনিস পরিষ্কার করার কোনও সম্ভাবনা নেই এবং অন ডেটা ক্ষতিগ্রস্থ হতে পারে।

হিসাবে হিসাবে SIGHUP, HUP"হ্যাং আপ" এর অর্থ দাঁড়ায় এবং historতিহাসিকভাবে বোঝায় যে মডেমটি সংযোগ বিচ্ছিন্ন হয়ে গেছে। এটি মূলত সমতুল্য SIGTERM। ডেমনগুলি কখনও কখনও কনফিগারটি SIGHUPপুনরায় আরম্ভ বা পুনরায় লোড করার জন্য যে কারণে ব্যবহার করে তা হ'ল ডেমনগুলি কোনও নিয়ন্ত্রণকারী টার্মিনালগুলি থেকে ডিমনকে আলাদা করে রাখে কারণ সেগুলি কখনই গ্রহণ করতে পারে না SIGHUP, সুতরাং সেই সংকেতটি সাধারণ ব্যবহারের জন্য "মুক্ত" হিসাবে বিবেচিত হত। সমস্ত ডেমনগুলি পুনরায় লোডের জন্য এটি ব্যবহার করে না! SIGHUP এর জন্য ডিফল্ট ক্রিয়াটি সমাপ্ত করা হয় এবং অনেকগুলি ডেমন সেভাবে আচরণ করে! সুতরাং আপনি অন্ধভাবে SIGHUPডেমনগুলিতে এস পাঠাতে এবং সেগুলি বেঁচে থাকার প্রত্যাশা করে যেতে পারবেন না ।

সম্পাদনা: SIGINT কোনও প্রক্রিয়া বন্ধ করতে সম্ভবত অনুপযুক্ত, কারণ এটি সাধারণত বাঁধা থাকে ^Cবা কোনও প্রোগ্রামে বাধা দেওয়ার জন্য টার্মিনাল সেটিংসটি যাই হোক না কেন। অনেক প্রোগ্রাম তাদের নিজস্ব উদ্দেশ্যে এটি ক্যাপচার করে, সুতরাং এটি কাজ না করার পক্ষে এটি যথেষ্ট সাধারণ। SIGQUITসাধারণত একটি কোর ডাম্প তৈরির ডিফল্ট থাকে এবং আপনি যদি চান না তবে মূল ফাইলগুলি এটি ভাল প্রার্থী নয় around

সংক্ষিপ্তসার: আপনি যদি প্রেরণ করেন SIGTERMএবং প্রোগ্রামটি আপনার সময়সীমার মধ্যে না মারা যায় তবে তা প্রেরণ করুন SIGKILL


4
দ্রষ্টব্য যে সিগিলের সাথে এটি অনুসরণ কেবল এমন পরিস্থিতিতে করা উচিত যেখানে তাত্ক্ষণিকভাবে বন্ধ হওয়া ডেটা ক্ষতি / তথ্য দুর্নীতি রোধ করার চেয়ে তাত্ক্ষণিকভাবে বন্ধ করা উচ্চ অগ্রাধিকার।
থোমাস্রুটার

@dwc আপনার উত্তরের নিম্নলিখিত বিষয়গুলি আমি বুঝতে পারি নি। আপনি দয়া করে সহায়তা করতে পারেন "যে কারণে ডেমনগুলি কখনও কখনও কনফিগারটি পুনরায় চালু করতে বা পুনরায় লোড করতে SIGHUP ব্যবহার করে তা হ'ল ডেমনগুলি কোনও নিয়ন্ত্রণকারী টার্মিনালগুলি থেকে বিচ্ছিন্ন হয়ে যায় এবং তাই কখনই সাইনটার্ম গ্রহণ করতে পারে না, সুতরাং সেই সংকেতটি সাধারণ ব্যবহারের জন্য" মুক্ত "হিসাবে বিবেচিত হত।"
জ্যাক

4
@ জ্যাক আমাকে চেষ্টা করুন: সাইনআপ হল "হ্যাঙ্গ আপ" সিগন্যাল যা কোনও প্রক্রিয়াটি বলে যে টার্মিনালটি সংযোগ বিচ্ছিন্ন হয়ে গেছে। যেহেতু ডেমোনগুলি পটভূমিতে চালিত হয়, তাই তাদের টার্মিনালগুলির প্রয়োজন নেই। এর অর্থ হ'ল একটি "হ্যাঙ্গ আপ" সিগন্যাল ডেমনের সাথে প্রাসঙ্গিক নয়। তারা এটিকে কখনই টার্মিনাল সংযোগ থেকে গ্রহণ করবে না, যেহেতু তাদের প্রথম স্থানে টার্মিনাল সংযুক্ত নেই। এবং যেহেতু সংকেতটি সংজ্ঞায়িত করা হয়েছে, যদিও এটির মূল উদ্দেশ্যটির জন্য এটির প্রয়োজন নেই, তাই অনেকগুলি ডেমোন পরিবর্তে অন্য উদ্দেশ্যে যেমন তাদের কনফিগার ফাইলগুলি পুনরায় পড়ার জন্য এটি ব্যবহার করে।
সিস্টেম PAUSE

ধন্যবাদ সিস্টেম PAUSE। এটি সহায়ক।
জ্যাক

7

SIGTERMআসলে একটি অ্যাপ্লিকেশনকে একটি বার্তা প্রেরণ করার অর্থ: " আপনি কি দয়াবান হয়ে আত্মহত্যা করবেন "? এটি ক্লিনআপ এবং শাটডাউন কোড চালানোর জন্য অ্যাপ্লিকেশন দ্বারা আটকা পড়ে এবং পরিচালনা করা যায়।

SIGKILLঅ্যাপ্লিকেশন দ্বারা আটকা যায় না। অ্যাপ্লিকেশনটি ক্লিনআপের কোনও সুযোগ ছাড়াই ওএস দ্বারা হত্যা করে।

এটি SIGTERMপ্রথমে প্রেরণ , কিছুক্ষণ ঘুমানো, তারপরে পাঠানো সাধারণ SIGKILL


আমি মনে করি ভোটদানটি ঘুমানোর চেয়ে কিছুটা দক্ষ হবে (সিগ্কিলের আগে)
ওহাদ স্নাইডার ২

@ ওহাদস্কিনিডার এটি করতে পারে তবে এর জন্য সহজ বাশ কমান্ডের চেয়ে আরও বেশি কিছু প্রয়োজন।
ভের্টেক

হ্যাঁ আমি অনুমান করি প্রক্রিয়াটি জীবিত থাকাকালীন আপনাকে এ জাতীয় কিছু ব্যবহার করে লুপ করতে হবে: স্ট্যাকওভারফ্লো . com / a / 15774758 / 67824
ওহাদ স্নাইডার

5
  • উইন্ডোতে "এক্স" ক্লিক করার সমতুল্য সিগনটার্ম।
  • লিনাক্সটি বন্ধ হয়ে যাওয়ার সময় সিএনজিআরএমটি প্রথমে ব্যবহার করে।

এটাই আমি জানতে চেয়েছিলাম। +1 ধন্যবাদ
লুক

6
"সিগন্যাটার উইন্ডোতে" এক্স "ক্লিক করার সমতুল্য" না, এটি নয়, কারণ যে কোনও একটি অ্যাপ্লিকেশন সহজেই কয়েকটি সংখ্যক (নথি এবং সরঞ্জাম, উদাহরণস্বরূপ) উইন্ডো খুলতে পারে, ডায়লগটি ছেড়ে দেয় এবং এটি নাও করতে পারে এমনকি একটি উইন্ডোজ ক্লোজ কমান্ডের প্রতিক্রিয়া যেমন এটি একটি প্রস্থান কমান্ডের মতো হয় (আমি কোনও সুস্পষ্ট উদাহরণের কথা ভাবতে পারি না, তবে অপরিবর্তনীয় হলেও, এটি কেন এমনভাবে করা যায় না তার কোনও কারণ নেই)। সাইন্টারএম হ'ল গ্রেফতার করে অ্যাপ্লিকেশনটি সমাপ্ত করতে বলছে , তবে এটি সেই বিশেষ অ্যাপ্লিকেশনটিতে সম্পাদিত হতে পারে
ব্যবহারকারী

3

এখানে সমস্ত আলোচনা চলছে, কোনও কোড দেওয়া হয়নি। এখানে আমার গ্রহণ:

#!/bin/bash

$pid = 1234

echo "Killing process $pid..."
kill $pid

waitAttempts=30 
for i in $(seq 1 $waitAttempts)
do
    echo "Checking if process is alive (attempt #$i / $waitAttempts)..."
    sleep 1

    if ps -p $pid > /dev/null
    then
        echo "Process $pid is still running"
    else
        echo "Process $pid has shut down successfully"
        break
    fi
done

if ps -p $pid > /dev/null
then
    echo "Could not shut down process $pid gracefully - killing it forcibly..."
    kill -SIGKILL $pid
fi

0

এইচইপি আমার কাছে আবর্জনার মতো শোনাচ্ছে। এটির কনফিগারেশনটি পুনরায় পড়ার জন্য আমি এটি পাঠাতে চাই।

সাইনটারমে বাধা দেওয়া যেতে পারে; আপনার ডেমনগুলিতে কেবল এটি সংকেত প্রাপ্ত হলে চালানোর জন্য ক্লিন আপ কোড থাকতে পারে। আপনি সিক্কিলের জন্য এটি করতে পারবেন না। সুতরাং সিগকলের সাহায্যে আপনি ডিমন লেখককে কোনও বিকল্প দিচ্ছেন না।

উইকিপিডিয়ায় এটি আরও

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.