Ctrl + C কোনও প্রক্রিয়া মারতে না পারলে কী করবেন?


171

Ctrl+ Cসর্বদা বর্তমান প্রক্রিয়াটি হত্যার জন্য কাজ করে না (উদাহরণস্বরূপ, যদি সেই প্রক্রিয়াটি নির্দিষ্ট নেটওয়ার্ক ক্রিয়াকলাপে ব্যস্ত থাকে)। সেক্ষেত্রে আপনি কেবল আপনার কার্সর দ্বারা "" ডিগ্রি সেন্টিগ্রেড "দেখুন এবং আরও কিছু করতে পারবেন না।

আমার টার্মিনালটি না হারিয়ে সেই প্রক্রিয়াটি এখন মরতে বাধ্য করার সবচেয়ে সহজ উপায় কী?

উত্তর সারাংশ: সাধারণত, আপনি পারেন Ctrl+ + Zঘুমাতে প্রক্রিয়া করা, এবং তারপর কি kill -9 _process-pid_, যেখানে আপনার সাথে প্রক্রিয়া এর PID এটি PS এবং অন্যান্য সরঞ্জাম। বাশের উপর (এবং সম্ভবত অন্যান্য শেল), আপনি kill -9 %1(বা '% N' সাধারণভাবে) করতে পারেন যা সহজ। যদি Ctrl+ Zকাজ না করে, আপনাকে অন্য একটি টার্মিনাল খুলতে হবে এবং সেখান থেকে হত্যা করতে হবে।


screenএটি একটি সম্ভাব্য সমাধান হতে পারে, আপনাকে killসেখান থেকে একটি নতুন উইন্ডো এবং প্রক্রিয়া তৈরি করার অনুমতি দিচ্ছে।
ববি

2
ধরে নিচ্ছেন যে আপনি ইতিমধ্যে একটি স্ক্রিনে
ডাস্টিন বসওয়েল

উত্তর:


119

কেন Ctrl+ Cকাজ করে না এই সমস্যাটি বুঝতে , আপনি এটি টিপলে কী ঘটে তা বোঝা খুব সহায়ক:

সর্বাধিক শাঁস বাঁধে Ctrl+ + C"একটি পাঠাতে SIGINT প্রোগ্রাম যা বর্তমানে ফোরগ্রাউন্ড রান সংকেত"। ম্যান সিগন্যালের মাধ্যমে আপনি বিভিন্ন সংকেত সম্পর্কে পড়তে পারেন :

 SIGINT        2       Term    Interrupt from keyboard

প্রোগ্রামগুলি সিগন্যালটিকে এড়িয়ে যেতে পারে, যেহেতু তারা SIGTSTP কেও উপেক্ষা করতে পারে :

 SIGTSTP   18,20,24    Stop    Stop typed at tty

(আপনি Ctrl+ টিপলে সর্বাধিক শেলগুলি কোনটি হয় Z, তাই এটি কাজ করার নিশ্চয়তা দেয় না is)

: কিছু সংকেত যা প্রক্রিয়া দ্বারা উপেক্ষা করা যাবে না হয় SIGKILL , SIGSTOP এবং কিছু অন্যদের। আপনি কিল কমান্ডের মাধ্যমে এই সংকেতগুলি পাঠাতে পারেন । সুতরাং, আপনার ঝুলন্ত / জম্বিওয়াইং প্রক্রিয়াটি হ'তে কেবল প্রক্রিয়া আইডি (পিআইডি) সন্ধান করুন। উদাহরণস্বরূপ, ব্যবহার করুন pgrepবা psতারপরে killএটি:

 % kill -9 PID

13
একটি নিছক মন্তব্য। সাবধান থাকুন যে "জম্বি" প্রযুক্তিগতভাবে একটি প্রক্রিয়া রাষ্ট্র এবং এটি আপনি এখানে "জম্বিইয়িং" বলতে যা বোঝাতে চেয়েছিলেন তেমন নয়। (একটি সমাপ্ত প্রক্রিয়া যা অপেক্ষা করা হয়নি () - এর পিতামাতার সম্পাদনা জোম্বি ( Z) অবস্থায় রয়েছে this
এক্ষেত্রে

হায়, কখনও কখনও ctrl + c, ctrl + z, এবং ctrl + \ সকলেই কিছুই করেন না এবং প্রক্রিয়াটি পূর্বাবস্থায় ফিরে চলছে (পাসওয়ার্ড ছাড়াই অনুমতিপ্রাপ্ত) সুতরাং আপনি কেবলমাত্র প্রক্রিয়াটিতে একটি সংকেত পাঠাতে পারবেন না।
মাইকেল

112

যদি Ctrl+ C(সাইন ইন ) কাজ না করে তবে Ctrl+ \(SIGQUIT) চেষ্টা করুন । তারপরে Ctrl+ Z(SIGTSTP) চেষ্টা করুন । যদি এটি আপনাকে শেল প্রম্পটে ফিরিয়ে killদেয় তবে প্রক্রিয়া আইডিতে করুন। (SIGTERM সংকেত, যা আপনার সাথে নির্দিষ্ট করতে পারেন এই অক্ষমতা kill -TERM। কিছু শাঁস, আপনি ব্যবহার সক্ষম হতে পারে %1PID, পড়ুন।) যদি এতে কাজ না হলে, অন্য টার্মিনাল অথবা ssh সেশন-এ যান এবং কি করতে killবা kill -TERMউপর প্রক্রিয়া আইডি কেবলমাত্র একটি শেষ অবলম্বন হিসাবে আপনার kill -KILLউফ করা উচিত kill -9, কারণ এটি প্রক্রিয়াটিকে পরিষ্কারভাবে বিসর্জন, তার খোলা ফাইলগুলি সিঙ্ক করতে, তার অস্থায়ী ফাইলগুলি সরিয়ে, নেটওয়ার্ক সংযোগগুলি বন্ধ করার ইত্যাদি সুযোগ দেয় না etc.


32

প্রোগ্রামটি স্থগিত করতে এবং এটি ব্যাকগ্রাউন্ডে রাখতে Ctrl-Z টিপুন :

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(আবার ব্যবহার করে অগ্রভাগে পুনরুদ্ধার করুন fg)

তারপরে, আপনি এটির প্রক্রিয়া আইডি দিয়ে killবা kill -9এটি করতে পারেন (আপনি এটি থেকে পান ps a)।


13
ব্যাশের সাহায্যে আপনি kill $!যেমনটি করতে পারেন $!তেমন একটি বিশেষ পরিবর্তনশীল যা সর্বশেষ পটভূমি প্রোগ্রামের পিড ধারণ করে।
লোয়েকি

@ ললোকি আমার পক্ষে কাজ করে না (অন্তত নির্ভরযোগ্য নয়)। bgভেরিয়েবলটি নির্ধারিত একটি মান পাওয়ার আগে আমাকে একবার করতে হবে ।
ড্যানিয়েল বেক

2
@ ড্যানিয়েল, সঠিক এটি যেমনটি আমি বলেছিলাম সর্বশেষ পটভূমি প্রক্রিয়াটি bgCtrl + Z এর পরে ঠিক ততটাই প্রয়োজন তবে এটি কেবল স্থগিত।
ললোকি

2
দ্রষ্টব্য: এটি কেবল একটি কৌশল নয়, একই নামের সাথে যদি আপনার একাধিক প্রক্রিয়া চলমান থাকে তবে psআউটপুট (বা killall) ব্যবহার করা বেশ ঝুঁকিপূর্ণ। ps -e -o pid,commandকেবল প্রোগ্রামের নাম নয়, পিড + পুরো আরগগুলি সরবরাহ করবে তবে আবার বৈষম্য করার পক্ষে যথেষ্ট নাও হতে পারে। বিপরীতে $!একটি নিশ্চিত আঘাত।
লোয়েকি

1
@ ললোকি আমি একমত নই উদাহরণস্বরূপ ps aআমার সিস্টেমে আউটপুট লাইন : একই কমান্ডের (কত ) 27721 s000 T 0:00.09 topসাসপেন্ডেড ( T, আমি মনে করি) উদাহরণগুলি ( top) আপনি একই টিটিটিতে ( s000) চালিয়ে যাচ্ছেন ?
ড্যানিয়েল অঙ্গুলিনির্দেশ

30

পাশাপাশি এই লিঙ্কটি দেখুন ।

Ctrl+ Z: একটি প্রক্রিয়া বিরতি দিন।

Ctrl+ C: বিনীতভাবে প্রক্রিয়াটি এখনই বন্ধ করতে বলুন।

Ctrl+ \: বর্তমানে অগ্রভাগে রয়েছে এমন প্রক্রিয়াটি নির্দয়ভাবে হত্যা করুন


"ctrl"+ "\"আমার পক্ষে কাজ করেনি
বেনিয়ামিন জাফারি

13

সাধারণত, আপনি এখনও প্রক্রিয়াটি বন্ধ করতে পারেন ( Ctrl+ Z) এবং তারপরে ব্যবহার করুন kill -9। কারণ kill -9, আপনার প্রথমে পিআইডি প্রক্রিয়াটি দরকার । পটভূমি কাজ জন্য, kill -9 %1এটা করতে সবচেয়ে সহজ উপায় - আপনি যদি কোন পটভূমি কাজ তোমাকে হত্যা করতে চান তার সংখ্যা হয়, চালানো jobs

বিকল্পভাবে, আপনি এর সাথে প্রক্রিয়া আইডি খুঁজে পেতে পারেন

ps

তাহলে আপনি চালাতে পারেন

kill -9 <Appropriate PID from ps output>

5

বাশ (এবং অন্যান্য শেলস?) এর সহজ সমাধানটি হ'ল:

Ctrl-z      followed by     kill -9 %1

যেখানে '% 1' হ'ল কাজের সংখ্যা বোঝায়। আপনার যদি ইতিমধ্যে অন্য কাজ ঘুমাচ্ছে তবে এটি '% 2' (বা অন্য কিছু) হতে পারে। আপনি যখন Ctrl-z তে আঘাত করবেন তখন আপনি এটি দেখতে পারেন যে কোন কাজের নম্বরটি:

[1]+  Stopped                 <process name>

মনে রাখবেন যে 'কিল' হ'ল / বিন / কিল নয়, হত্যার শেলের সংস্করণ।


4

1) আপনি কনসোলে এবং একাধিক ব্যবহারকারীর মোডে থাকলে আপনি CTRL-ALT-Fn টিপতে এবং অন্য স্ক্রিনে লগইন করতে পারেন, আইডি নম্বর দ্বারা প্রক্রিয়াটি ব্যবহার করতে পারেন ps -ef | grep <myprocessname>বা pidof <myprocessname>-9 মারতে পারেন ।

2) আপনি যদি দূর থেকে সংযুক্ত থাকেন তবে অন্য টার্মিনাল সেশনের মাধ্যমেও এটি করুন।

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

3) আপনি যদি কেবল একটি ঝুলন্ত ssh অধিবেশনে আটকে থাকেন (উদাহরণস্বরূপ, অন্য সিস্টেমে), টিলড (~) টিপতে চেষ্টা করুন যা পালাবার কী, এবং তারপরে হোস্ট সেশনে ফিরে যাওয়ার জন্য CTRL-Z টিপুন, তারপরে আপনি আটকে থাকা এসএসএস প্রক্রিয়াটিকে মেরে ফেলতে পারে বা সময় শেষ হওয়ার জন্য অপেক্ষা করতে পারে যা বেশিরভাগ সিলটি নিষ্ক্রিয়তার একটি সময় পরে করে।


0

যদি আপনি tmux বা স্ক্রিন ব্যবহার করে থাকেন এবং উপরের কোনওটি কাজ না করে আপনি এখনও ফলকটি মেরে ফেলতে পারেন <prefix> xতবে প্রক্রিয়াটিও মারা যায়।


0

আপনার / ইত্যাদি / প্রোফাইলে SIGINT (2) এর সাথে একটি ট্র্যাপ সেট রয়েছে। যদি তা হয় তবে এটি সরিয়ে দিন। লগআউট করুন এবং ফিরে লগ ইন করুন এবং আপনার ভাল হওয়া উচিত।

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