`Ctrl + c` ব্যবহার না করে কীভাবে` টেল-ফ` মোডটি ছাড়বেন?


22

আমি যখন করি tail -f filename, Ctrl+cপ্রক্রিয়াটি বিনষ্ট না করে মোডটি কীভাবে ছাড়ব?

কি আমি চাই একটি স্বাভাবিক উপায় মত প্রস্থান করার জন্য, হয় qমধ্যে top

আমি প্রশ্নটি সম্পর্কে কেবল কৌতূহলী, কারণ আমি অনুভব করি যে প্রক্রিয়াটি হত্যার কোনও উপায় ছেড়ে দেওয়ার ভাল উপায় নয়।


23
tailইন্টারেক্টিভ নয়; এটি আদেশ গ্রহণ করে না।
মুরু

5
সিগটারএম (ডিফল্ট) এবং সিগকলের সাথে হত্যা প্রক্রিয়াটির মধ্যেও পার্থক্য রয়েছে। সিগন্টারম প্রক্রিয়াটি বন্ধ করতে 'জিজ্ঞাসা করে', এবং এই সংকেতটি প্রোগ্রামের মাধ্যমে পরিচালনা করতে পারে। অন্যদিকে SIGKILL আসলে প্রক্রিয়াটিকে হত্যা করে। আরও man signalদেখুন
mrc02_kr

9
এই প্রশ্নের ভিত্তি ত্রুটিযুক্ত। আপনি যেভাবে ভাবছেন সেই বিশেষ চরিত্রটি প্রক্রিয়াটিকে "হত্যা" করে না । এটি এতে বাধা সংকেত প্রেরণ করে , কিল বা সমাপ্তি সংকেতগুলিকে নয়।
JdeBP

6
tailএটিকে বাধা দেওয়া বা উদ্বেগ ছাড়াই হত্যা করা পুরোপুরি যুক্তিযুক্ত । তবে আপনি যদি বিকল্প চান, তবে বিবেচনা করুন most, যা শিফট + এফ দিয়ে শুরু করা হয়েছে এবং স্বীকারোক্তর সাথে পরিষ্কারভাবে বেরিয়ে আসতে পারে, যা স্বীকৃতভাবে অধীন-ডকুমেন্টেড "ফলো" মোডে রয়েছে
টবি স্পাইট

4
পাঠানোর ^ একটি প্রক্রিয়া সি - সমস্যা এখানে আপনার উপলব্ধি করেন যে, "প্রক্রিয়া হত্যা একটি ভালো উপায় কিছু প্রস্থান করার জন্য নয়" হয় হয় বলে "আমি আপনার সাথে কাজ করছি এবং আমি আপনাকে থামাতে চাই" এর একটি উপায় এটা হল লিনাক্স একটি টার্মিনাল প্রক্রিয়া থেকে প্রস্থান করার জন্য "ডিফল্ট" উপায়। যদি আপনি কিছুটা দীর্ঘ চলমান প্রক্রিয়া থেকে বেরিয়ে আসার জন্য বেছে নিচ্ছেন তবে এটি বন্ধ করার জন্য আপনার পছন্দের tail -f
জোশ

উত্তর:


46

মন্তব্যে যেমন বলা হয়েছে, প্রক্রিয়াটি Ctrl-Cহত্যা করে না tail, যা সিআইজিটারএম বা সিগ্কিল সিগন্যাল (কুখ্যাত -9...) প্রেরণ করে করা হয় ; এটি কেবলমাত্র একটি সিগিন্ট প্রেরণ করে যা tailসামনের দিকের মোডটি শেষ করতে এবং প্রস্থান করতে বলে ।

এফওয়াইআই, এগুলি একটি ভাল সরঞ্জাম:

less +F filename

ইন less, আপনি Ctrl-Cফরোয়ার্ড মোডটি শেষ করতে টিপতে এবং ফাইলটির মাধ্যমে স্ক্রোল Fকরতে পারেন , তারপরে আবার ফরোয়ার্ড মোডে ফিরে যেতে টিপুন ।

দ্রষ্টব্য যে less +Fএর পক্ষে আরও ভাল বিকল্প হিসাবে অনেকের পক্ষে পরামর্শ রয়েছেtail -f । দুটি সরঞ্জামের মধ্যে পার্থক্য এবং সতর্কতার জন্য, এই উত্তরটি পড়ুন: `লেজু -ফ` কম + F` এর চেয়ে বেশি দক্ষ?


7
অন্য প্রসঙ্গ. ওপিতে "ফরোয়ার্ড মোডটি শেষ করে ফাইলটির মাধ্যমে স্ক্রোল করতে" জিজ্ঞাসা করা হয়নি। বরং ওপি জিজ্ঞাসা করেছিল যে কীভাবে
সিটিআরএল

6
@ fpmurphy1 দেওয়া যে ওপি-র প্রশ্নের ভিত্তিটি ভুল ( tailসিটিআরএল-সি দ্বারা নিহত হয় না এবং ইন্টারেক্টিভ নয়) আমি বিশ্বাস করি যে আমার উত্তর যথাযথের চেয়ে বেশি।
dr01

11
@ fpmurphy1 আপনি যদি ওপরে আক্ষরিকভাবে হ্যাঁ নেন তবে এটি অফ-টপিক, তবে আমি এমন শিক্ষাগত উত্তর পছন্দ করি যা ভুল বোঝাবুঝির সমাধান করে এবং একই সাথে ওপি আসলে কী অর্জন করতে চাইছিল তার উত্তর দেয় , অর্থাত্ আসল প্রশ্ন।
মারিওডিএস

15
"Ctrl-C লেজ প্রক্রিয়াটি হত্যা করে না" - হ্যাঁ এটি করে। বা কমপক্ষে যতটা kill <pid>করে। বেশিরভাগ প্রোগ্রামের জন্য, Ctrl-C(= SIGINT) SIGTERMএবং কিছুটা হলেও, এর মধ্যে কোনও আসল পার্থক্য নেই SIGKILL। তিনটির জন্যই ডিফল্ট ক্রিয়াটি কেবল প্রক্রিয়াটি সমাপ্ত করা, যেমন কল করা exit()হয়েছিল, ব্যাতিক্রমে, এর সাথে SIGKILLযুক্ত ইউজার-মোড কোডের কোনওটিই exit()বলা হয় না (সুতরাং কোনও atexit()ক্লিনআপস নেই )। Ctrl-Cএবং SIGTERM, বিশেষত, প্রোগ্রামটি সম্পূর্ণরূপে অভিন্ন হয় যদি না প্রোগ্রামটি স্পষ্টভাবে হয় এবং এটিতে কাজ করে। জিএনইউ লেজ দেয় না।
মার্সেলেম

4
@ মার্সেলম প্রক্রিয়াটি সমাপ্ত exit()করা বলা হওয়ার মতো নয় । হ্যান্ডলারগুলি exit()চালাবে atexit()এবং ওপেন স্টডিও ফাইলগুলি পরিষ্কার করবে (সবচেয়ে গুরুত্বপূর্ণভাবে আউটপুট বাফারগুলি ফ্লাশ করছে)। একজন SIGINTহ্যান্ডলার এটি করতে পারে তবে বেশিরভাগ প্রোগ্রাম বিরক্ত করে না; আমি জানি না কি tailহয়।
বার্মার

14

আমি যা চাই তা ছাড়ার একটি সাধারণ উপায়, যেমন শীর্ষে কিউ।

এটা ControlC:)

আমি প্রশ্নটি সম্পর্কে কেবল কৌতূহলী, কারণ আমি অনুভব করি যে প্রক্রিয়াটি হত্যার কোনও উপায় ছেড়ে দেওয়ার ভাল উপায় নয়।

^C( ControlC) একটি পাঠায় SIGINT প্রক্রিয়া, যা হিসাবে সংজ্ঞায়িত করা হয় না:

সিগন্যাল সিগন্যালটি একটি নিয়ন্ত্রণকারী টার্মিনাল দ্বারা কোনও প্রক্রিয়াতে প্রেরণ করা হয় যখন কোনও ব্যবহারকারী প্রক্রিয়াটিতে বাধা দিতে চায়

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

চাপ ^Cদিয়ে লিনাক্সের কোনও কার্যকে বাধা দেওয়ার চেষ্টা করা হবে - এটি পুরোপুরি স্বাভাবিক এবং যদি প্রক্রিয়াটি কোনও কিছুর মাঝখানে থাকে এবং আপনি এটি শেষ করতে দিচ্ছেন না, এবং তবে কেবল "ভাল নয়" পক্ষ প্রভাব যে প্রক্রিয়া থেকে বাকি জিনিস। উদাহরণস্বরূপ, ^Cএকটি makeকমান্ডের মাঝখানে আংশিক-সংকলিত সফ্টওয়্যার ছেড়ে যায়, তবে এটি ঠিক আছে: আরও একটি রান makeচালিয়ে যায় যেখানে এটি ছেড়ে গেছে / পুনরায় শুরু করবে।


2
আসলে, makeউদাহরণটি .DELETE_ON_ERROR:আমাদের মেকফিলগুলিতে কেন সর্বদা লিখি - এটি একটি অনুস্মারক is আমরা আংশিকভাবে লিখিত মধ্যবর্তী ফাইলগুলি মুছে ফেলতে চাই যখন এটি জানতে পারে যে এর একটি আদেশ একটি সিগন্যাল পেয়েছে।
টবি স্পিড

প্রক্রিয়াগুলি SIGINTটবির .DELETE_ON_ERROR:উদাহরণে নির্দেশিত হিসাবে প্রস্থান করার আগে ফাঁদ পেতে এবং পরিষ্কার করতে পারে ।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

1
হ্যাঁ, সিগিন্টকে ফাঁদে ফেলার দক্ষতা হ'ল আমি কেন বলেছিলাম যে এটি আর্থার যা চায়। লেজের জন্য "সুন্দর" হওয়ার দরকার নেই, আপনি কোনও অনুভূতিতে আঘাত করবেন না ^C:)
জোশ

12

tail -fফাইলনাম, Ctrl cপ্রক্রিয়াটি বিনষ্ট না করে মোডটি কীভাবে ছাড়বেন

আপনি এটা করতে পারবেন না। সম্ভবত আপনি চালাতে চেয়েছিলেনtail -f somefile | less

Ctrl c(এবং আপনার শেল দ্বারা) TTY সাব-সিস্টেম দ্বারা ব্যাখ্যা করা হয় এবং একটি পাঠায় SIGINTসংকেত (দেখুন সংকেত (7) এবং Pty (7) ...)। Tty demysified দেখুন ।


6

এটি আপনার প্রশ্নের কাজ করে এবং উত্তর দেয়, তবে এটি একটি বিশেষ সন্তোষজনক সমাধান নয়।

timeout 15s tail -f /var/log/messages

এটি 15 সেকেন্ডের জন্য কমান্ডটি চালাবে এবং তারপরে চাপ না দিয়ে এটি আপনার জন্য হত্যা করবে ^C


5
হ্যাঁ, তাই কম্পিউটার বন্ধ হয়ে যাওয়ার tailকাজ চলছে। তবুও, আপনি অনুমান করি না ভুল।
অ্যারোন

5
কীভাবে tailসাইনটারের সাথে টার্মিনেশন সিগিন্ট দিয়ে শেষ করার চেয়ে ভাল?
দিমিত্রি গ্রিগরিয়েভ

1
@ দিমিত্রিগ্রিরিভ আপনি পুরোপুরি ঠিক বলেছেন - এটি আরও ভাল নয়। তবে এই উত্তরটি সরাসরি ওপি-র প্রশ্নের জবাব দেয়, যদিও বাস্তবে এটি ব্যবহারে খুব বেশি ব্যবহার হয় না। তবে আমি পিংয়ের মতো জিনিসগুলি সমাপ্ত করতে সময়সীমা ব্যবহার করেছি, যখন ডেল ডিআরএসি জাভা অ্যাপ্লিকেশন ব্যবহার করার সময় কন্ট্রোল টিপতে মেনু নির্বাচন এবং নিয়ন্ত্রণ মুক্ত করার জন্য দ্বিতীয় মেনু পছন্দ প্রয়োজন (এটি কেবল বিরক্তিকর ছিল, একটি ডেল সি 522 ব্লেড)
ক্রিগগি

0

প্রসঙ্গের ভিত্তিতে উত্তর পৃথক হয়। মার্জিতভাবে লেজ- ত্যাগ করতে আপনার একটি ট্রিগার প্রয়োজন need ধরে নিন আপনি এমন কোনও কাজের আউটপুট নিরীক্ষণের চেষ্টা করছেন যা কোনও এক সময় শেষ হবে - যা আপনার ট্রিগার হয়ে উঠতে পারে।

task >& filename.log &
task_pid=$!
tail -f filename.log &
tail_pid=$!
while [ 1 ]
do
    # -0 is a special "poke" signal - "are you around?"
    kill -0 $task_pid
    if [ $? -eq 0 ]
    then
        # Original task is still alive.
        sleep 2
        continue
    fi
    kill -TERM $tail_pid
    break
done

আমি আগেও একই ধরণের ধারণা ব্যবহার করেছি।

উপভোগ করুন।

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