বেশ কয়েকবার সিআরটিএল-সি টিপে চালানো প্রোগ্রামটি আরও দ্রুত বন্ধ করে দেয়?


41

আমি প্রায়শই একটি বিশাল ফাইল পড়তে শুরু করি এবং তারপরে কিছুক্ষণ পরে প্রস্থান করতে চাই, তবে প্রোগ্রামটি থামাতে
Ctrl+ চাপতে পিছনে আছে C। বেশ কয়েকবার Ctrl+ Cকী টিপে ল্যাগটি ছোট করার কোনও সুযোগ আছে কি ? নাকি আমি আমার কীপ্রেসগুলি নষ্ট করছি?


আমি লক্ষ্য করেছি এমন একটি প্রক্রিয়া চালিত করার সময় যা বিভিন্ন শিশু প্রসেসকে কল করে, Ctrl-C কখনও কখনও চলমান শিশুকে বাধা দেয় তবে পিতামাতার প্রক্রিয়াটি নয়। এটি সত্য bash, তবে সেই ক্ষেত্রে নয় zshযা সর্বদা পিতামাতাকে বন্ধ করে দেয়। এটি আমার পছন্দ করার একটি কারণ zsh
জোয়েটউইডল

17
হ্যাঁ, বার বার লিফ্ট বাটন বা ক্রস-ওয়াক বোতাম টিপানোর ফলে লিফটটি শীঘ্রই আসতে পারে বা আলো সবুজ দ্রুত পরিণত হয়।
মাইকেল

3
হ্যাঁ ঠিক লিফট এবং ক্রসওয়াক বোতামগুলির মতো, সিটিআরএল-সি স্টিকি বা মরিচা পেতে বা যদি আইফাই সংযোগগুলি বিকাশ করতে পারে। বেশি বার চাপ দেওয়া একটি কৌশল অবলম্বন কারণ লিফটটি আসার জন্য কেবলমাত্র একটি প্রেসের রেজিস্ট্রেশন করতে হয়, হালকা হয়ে যাওয়ার জন্য ওয়াক সাইন বা প্রোগ্রামটি বন্ধ করতে হবে।
হিপ্পিট্রেইল

1
@ হিপ্পিটরেইল তবে আপনার শেলটি মুদ্রণ করবে ^Cযখন এটি প্রেসটি নিবন্ধ করবে (কমপক্ষে বাশ করবে)
wchargin

1
এটির মূল্য কীসের জন্য, আমি এটি আমার কীপ্রেসগুলি নষ্ট করার বিষয়টি বিবেচনা করি না - আমি এটিকে ক্ষতিকারক উপায়ে কিছুটা হতাশার প্রতিরোধ হিসাবে বিবেচনা করি। (আমি এটি সাধারণত ২-৩ বার আঘাত করি, তবে এটি আংশিক কারণ আমি ফোন লাইনে সংযুক্ত টার্মিনালগুলিতে "বড় হয়েছি" যেখানে আপনি সবসময় মেশিনে পৌঁছে যাওয়া প্রতিটি কী-স্ট্রোকের উপর নির্ভর করতে পারবেন না))
কেশলাম

উত্তর:


35

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


কেন এটি পরিষ্কার করার রুটিনে বাধা দেওয়া উচিত? INTপ্রক্রিয়াটি পুনরুদ্ধার করার এটি কেবল একটি অন্য সংকেত ।
বিশৃঙ্খলা

4
@ চাওস কেন এটি করা উচিত? এটি হওয়া উচিত যদি ক্লিন আপ রুটিন স্তব্ধ হয়ে যায় এবং আপনি এটি বন্ধ করতে চান। এটি কি আসলে এভাবে কাজ করে? হ্যাঁ, প্রায়শই। আপনি এটি কেবলমাত্র পর্যাপ্তরূপে প্রদর্শন করতে পারেন: একক লাইন দিয়ে বাশ স্ক্রিপ্ট তৈরি করুন trap "sleep 20 || echo clean up cancelled!" EXIT ; sleep 10। স্ক্রিপ্টটি চালান এবং দুবার ctrl-C চাপুন। আপনি দেখতে পাবেন যে দ্বিতীয় সিটিআরএল-সি "ক্লিন আপ" রুটিনে (ট্র্যাপ স্টেটমেন্টে) পাস করেছে এবং এর sleepকমান্ডটি সমাপ্ত করে ।
1024

1
@ জন 1024 আহ, এখন আমি এটি দেখতে পাচ্ছি। স্ক্রিপ্ট স্নিপেটের জন্য ধন্যবাদ ^^ তবে, ক্লিনআপটি বাতিল করা হয়নি দেখুন: trap "sleep 20 || echo clean up cancelled!; sleep 10; echo 'but continued'" EXIT ; sleep 10এটি কেবলমাত্র sleepআদেশগুলি যা সংকেত পেয়েছে। আমরা দুজনেই ভুল এক্সডি ছিলাম
বিশৃঙ্খলা

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

1
হ্যাঁ, উদাহরণ হিসাবে, ভিএলসি একাধিক সিআরটিএল + সি সংকেতকে অশুচি ছাড়ার উপায় হিসাবে ব্যাখ্যা করে, যেখানে একটি সিআরটিএল + সি পরিষ্কারভাবে প্রস্থান করার চেষ্টা করবে।
জেরেমি ভিজার 23

11

আপনি তাদের নষ্ট করছেন। যা ঘটেছিল তা হ'ল একবার যখন সার্ভারটি স্ক্রিন আউটপুটটি শেষ করে, এটি একাধিক গ্রহণ করবে Ctrl-C। প্রথমটি প্রক্রিয়াটি ধ্বংস করতে ব্যবহৃত হবে, এবং নিম্নলিখিতগুলি আপনার শেলের মধ্যে শেষ হবে, যা এরপরে এর মতো দেখাবে

[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ ^C
[user@server]$ 

6
প্রক্রিয়াটি সাইন ইন পাঠানোর সময় অগত্যা প্রস্থান করে না। এটি অনির্দিষ্টকালের জন্য বেঁচে থাকতে পারে এবং প্রতিবার Ctrl + C চাপলে আলাদা কিছু করতে পারে।
ব্রায়ান গর্ডন

সত্য। ব্যবহারকারী কীভাবে ফাইলটি পড়ছেন সে সম্পর্কে আমি অনুমান করছিলাম।
জেনি ডি

5

সংক্ষিপ্ত উত্তর: প্রক্রিয়া যদি তাতে প্রতিক্রিয়া জানায়।

লং উত্তর: যখন আপনি আঘাত ctrl+ + cকার্নেল প্রক্রিয়া একটি সংকেত পাঠায়। নিম্নলিখিত নির্দেশ দ্বারা কোন সংকেত নির্ধারণ করা যেতে পারে:

user@host:~# stty -a | grep -i "\^C"
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;

ম্যান পৃষ্ঠাটি দেখুন stty:

   intr CHAR
          CHAR will send an interrupt signal

এটি সংকেত INT, ২ নম্বর হিসাবেও পরিচিত the বেশিরভাগ প্রক্রিয়াগুলি সাফল্যের সাথে শেষ করতে কিছু সাফাইয়ের কাজ করে।


Ctrl-Z সাধারণত SIGTSTP প্রেরণ করে যা পরিচালনা করা যায় (SIGSTOP এর বিপরীতে)।
পিটার্ফ

4
না, এটি শেলটি নয় যা প্রক্রিয়াতে সাইন্ট প্রেরণ করে। এটি kernel(টার্মিনালের লাইন শৃঙ্খলা, টার্মিনাল ড্রাইভার) যা টার্মিনালের অগ্রভাগ প্রক্রিয়া গোষ্ঠীর প্রতিটি প্রক্রিয়াতে SIGINT প্রেরণ করে ।
স্টাফেন চেজেলাস


4

তুমি ঠিক বলছো. কিপ্রেসগুলি নষ্ট হচ্ছে। যখন আপনি টিপুন Crtl+Cএবং এটি সনাক্ত হয়ে যায়, এমন কিছু সংস্থান আছে যেগুলি সাফ করা দরকার, যার জন্য এটি সময় নেয়। আমি যেখানে Ctrl+Cটিপতে হবে তার একটি সম্ভাব্য কেস আমি জানি যখন আপনি কোনও ইউম আপডেট প্রক্রিয়া বাতিল করতে চান, যেখানে Ctrl+Cআপনি সত্যিকার অর্থে বাতিল করতে চান তা নিশ্চিত করার জন্য ইউ আপনাকে দুবার চাপতে হবে ।


2

যদিও Ctrl-Cসাধারণ ক্ষেত্রে শুধুমাত্র একটি প্রয়োজনীয়, এমন কিছু পরিস্থিতি রয়েছে যেখানে এটি প্রয়োজন হতে পারে। পাইথন, উদাহরণস্বরূপ, Ctrl-Cযখন একটি নতুন থ্রেড তৈরি হচ্ছে তখন ফাঁদগুলি পড়ে এবং তাই যদি অনেক থ্রেড শুরু করার মাঝে কিছু ভুল হয়ে যায় তবে pythonপিতা - মাতার প্রক্রিয়াটি না হওয়ার জন্য এটি একাধিকবার পাঠাতে হবে being ধরা।


1
এটি আমার সাথে এখন এবং তারপরে ঘটে যখন আমি বহু-থ্রেডযুক্ত / প্রক্রিয়াজাত পাইথন স্ক্রিপ্টগুলি তৈরি করি। কখনও কখনও মূল প্রক্রিয়াটি হত্যার আগে বেশ কয়েকটি প্রেসের প্রয়োজন হয়।
লিও

0

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

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