পটভূমিতে প্রক্রিয়াটি চালিয়ে যাওয়ার জন্য কীভাবে আমি একটি কী-চাপতে সিটিআরএল-জেড এবং বিজি করতে পারি?


25

আমি কাজটি স্থগিত করার এবং তারপর Ctrl-Z bgক্রমটি খুব বেশি চালিয়ে যেতে দেওয়ার এই প্যাটার্নটি অনুসরণ করি ।

আমি ভাবছিলাম যে একা কী চাপতে সংকোচনের কোনও উপায় আছে?

আমার শেল zsh


আমি বলতে চাই যে সম্ভবত হার্ড কোডেড। তবে আমি 100% নই
চাদ হ্যারিসন

অবশ্যই এটি তবে, তবে আমি মার্জিত সমাধানটি পেয়েছি, আপনাকে ধন্যবাদ superuser.com/a/161922/35223
এভেজেনি ডলঝেঙ্কো

উত্তর:


24

Ctrl+ + Zক্রম, টার্মিনাল দ্বারা পরিচালিত হয় শেল দ্বারা নয়। (দরকারী ব্যাকগ্রাউন্ড: 'টার্মিনাল', 'শেল', 'টিটি' এবং 'কনসোল' এর মধ্যে ঠিক পার্থক্য কী? )

কেবলমাত্র একটি ছোট, অ-এক্সটেনসিবল ফাংশন একটি টার্মিনালের কীতে আবদ্ধ হতে পারে । আপনি এই ফাংশনগুলিতে আবদ্ধ কীগুলি কাস্টমাইজ করতে পারেন তবে অন্য ফাংশন যুক্ত করতে পারেন না। এই ফাংশনগুলি তিনটি বিভাগে পড়ে:

  • প্রোগ্রামগুলিতে কমান্ড লাইন সংস্করণ যা তাদের নিজস্ব সরবরাহ করে না (ক্যানোনিকাল মোড, এটি রান্না করা মোড নামেও পরিচিত (কাঁচা মোডের বিরোধী দ্বারা), যা আপনি খুব সম্ভবত ব্যবহারে ব্যবহার করবেন): ফাইলের শেষ ( eof, Ctrl+ D), লাইনের শেষ ( eol, Ctrl+ M), বাম অক্ষর মুছে দিন ( erase, Ctrl+ H), বাম মুছে দিন ( werase, Ctrl+ W), মুছে ফেলুন লাইন ( kill, Ctrl+ U)।
  • ম্যানুয়াল প্রবাহ নিয়ন্ত্রণ: stop( Ctrl+ S), start( Ctrl+ Q)। কেবলমাত্র পুরানো সিরিয়াল টার্মিনালগুলিতে দরকারী যা অক্ষরগুলি হ্রাস করে যখন টার্মিনাল কম্পিউটারের সাথে বা তদ্বিপরীত রাখতে পারে না।
  • সিগন্যালিং: বাধা ( intr, Ctrl+ C), জোর করে ছেড়ে দিন ( quit, Ctrl+ \), সাসপেন্ড ( Ctrl+ Z)।

লিনাক্স সহ কয়েকটি সিস্টেম সেই তালিকাটি প্রসারিত করে, তবে আমি ব্যাকগ্রাউন্ডিং অন্তর্ভুক্ত এমন কোনওটি দেখিনি। নোট করুন যে এটি কার্নেলের টার্মিনাল ড্রাইভার এবং টার্মিনাল এমুলেটর উভয়ই সমর্থন করতে পারে। সুতরাং আপনাকে স্থগিতকরণের কাজ করতে হবে, যা অগ্রভাগের কাজটি একটি SIGTSTP সিগন্যাল প্রেরণ করে । অগ্রভাগের কাজের নেতার অভিভাবক প্রক্রিয়াতে এটি একটি SIGCHLD ট্রিগার করে , যা সাধারণত শেল। শেলটি যখন SIGCHLD পেয়েছিল তখন এটি waitpidকেন বিজ্ঞাপিত হয়েছে তা নির্ধারণ করার জন্য ফোন করে এবং একটি পটভূমি কাজ স্থগিত করা হয়েছে তা সনাক্ত করার পরে এটি একটি বিজ্ঞপ্তি (যেমন [1] + 12345 suspended mycommand) এবং একটি নতুন প্রম্পট প্রদর্শন করে disp

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


আমি যা করি তা হল বর্তমান কাজ ( ) এর পটভূমিতে zsh এ Ctrl+ Zকী সিকোয়েন্স সেট করা %%। এইভাবে, আমি Ctrl+ Z Ctrl+ টিপে পটভূমিতে অগ্রভাগের কাজটি পাঠাতে পারি Z। আমি এটা আছি করার সময়, আমি Ctrl+ + Zযখন বর্তমান ইনপুট লাইন ফাঁকা নয় অন্যথায় দরকারী কিছু (তাই আমি না শুধু ফিরে একটি subprocess থেকে আসা): "স্থগিত" বর্তমান ইনপুট লাইন, আমাকে অন্য কমান্ড টাইপ করতে সক্ষম হবেন , তারপরে বাধা লাইনটি ইনপুট বাফারটিতে ফিরে যায়।

fancy-ctrl-z () {
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z

গিলস, এটি একটি অবিশ্বাস্যরূপে সম্পূর্ণ, শিক্ষামূলক এবং চিন্তাশীল উত্তর যা আমি আশা করতে পারি না! তোমাকে অনেক ধন্যবাদ!
এভেজেনি ডলঝেঙ্কো

2

উপরের zsh এর মতো ^ z ^ z ব্যাশে সম্ভব, যদিও এটি কিছুটা ক্লডজি এবং আমি এটি দীর্ঘকাল চালিত না:

  • আপনার .inputrc এ ম্যাপিং অন্তর্ভুক্ত করুন "\C-z": "bg\n"
  • PS0 ব্যাশ ভেরিয়েবলের মধ্যে `$ (স্টাটি সাসপ ^ z) অন্তর্ভুক্ত থাকে
  • PROMPT_COMMAND ব্যাশ ভেরিয়েবলের মধ্যে 'স্টটি সাসপ ^ @' অন্তর্ভুক্ত

সুতরাং কমান্ড চালিত হওয়ার পরে স্থগিতের জন্য ^ z চালু করা হবে, তারপরে ব্যাশ প্রম্পটের জন্য বন্ধ করা হবে।


1

সমাধানটি পেয়েছি, ঠিক আমি যা চাই তা নয় বরং এখান থেকে ঘষুন htt /superuser//a/161922/35223

খালি কমান্ড লাইনে বিজি চালায় (যাতে Ctrl + Z Ctrl + Z একটি প্রোগ্রাম স্থগিত করে এবং সাথে সাথে এটিকে ব্যাকগ্রাউন্ডে পুনরায় শুরু করে)।


আমি লক্ষ করব যে এর জন্য zsh প্রয়োজন; এটি ব্যাশে সমর্থিত নয়। (বাক্সের বাইরে, যাইহোক)
কেভিন এম

@ কেভিনএম আপনি বাশে একটি অ্যানালগাস ফাংশন লিখতে পারেন (কমপক্ষে বেসিক সংস্করণ Ctrl+Zকল করা bg, আমি একটি খালি খালি ইনপুট লাইন সনাক্ত করার বিষয়ে নিশ্চিত নই)।
গিলস 'অশুভ হওয়া বন্ধ করুন'

0

এই কমান্ডগুলি কি আপনি প্রথমদিকে অগ্রভাগে চালাতে চেয়েছিলেন এবং তারপরে পটভূমিতে স্যুইচ করতে চান? এটি করার সহজ উপায় আছে কিনা তা আমি জানি না। তবে আপনি যদি কমান্ডগুলি চালনা করতে চান যা প্রারম্ভিক পটভূমিতে থাকবে তবে আপনি কেবল লাইনের শেষে একটি এম্পারস্যান্ড যুক্ত করতে পারেন। উদাহরণস্বরূপ, ping google.com &পটভূমিতে pinging শুরু হবে; আপনি টাইপ না করে আপনি এটির সাথে ইন্টারঅ্যাক্ট করতে পারবেন না fg


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

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