Zsh থেকে প্রস্থান করবেন, তবে চলমান চাকরিগুলি খোলা রাখবেন?


96

কেবল বাশ থেকে zsh এ স্যুইচ করা হয়েছে।

ব্যাশে, শেলটি প্রস্থান করার পরে পটভূমির কাজগুলি চলতে থাকে। উদাহরণস্বরূপ, এখানে dolphinচালানো চালিয়ে যান exit:

$ dolphin .
^Z
[1]+  Stopped                 dolphin .
$ bg
[1]+ dolphin . &
$ exit

এটিই আমি ডিফল্ট আচরণ হিসাবে চাই।

বিপরীতে, zsh এর আচরণ হ'ল চাকরি চালানো সম্পর্কে সতর্ক করা exit, যদি আপনি exitআবার থাকেন তবে সেগুলি বন্ধ করুন । উদাহরণস্বরূপ, dolphinদ্বিতীয়- exitকম্যান্ড আসলে শেলটি থেকে বেরিয়ে আসে তখন এটি বন্ধ থাকে :

 % dolphin .
^Z
zsh: suspended  dolphin .
 % bg
[1]  + continued  dolphin .
 % exit
zsh: you have running jobs.
 % exit 

আমি এখানে বাশ-এর ​​মতো zsh এর ডিফল্ট আচরণ করব কীভাবে?

উত্তর:


169

এর সাথে প্রোগ্রামটি শুরু করুন &!:

dolphin &!

&!( বা equivalently,&| ) উভয় করার জন্য একটি zsh-নির্দিষ্ট শর্টকাট পটভূমি এবং অস্বীকার প্রক্রিয়া, যেমন যে শেল থেকে প্রস্থান চলমান এটা ছাড়বে।


4
সম্পূর্ণতার জন্য, আপনি এটি ইতিমধ্যে শুরু হয়ে গেলে কীভাবে এটি অস্বীকার করবেন তাও তালিকাভুক্ত করতে পারেন?
trusktr

@trusktr অগ্রভাগ প্রক্রিয়াটি অস্বীকার করার বিষয়ে একটি আলাদা প্রশ্ন রয়েছে । আমি মনে করি পরিষ্কারতার জন্য এটি সবচেয়ে ভাল রাখা হয়েছে। বিশেষত zsh এর প্রতি আগ্রহী যে কারও জন্য, আমি অগ্রভাগ প্রক্রিয়াটি অস্বীকার করার জন্য কীভাবে একটি দ্রুত ওয়ার্কফ্লো তৈরি করতে হবে সে বিষয়ে আমি U&L SE তে একটি প্রশ্ন জিজ্ঞাসা করেছি ।
আনকো

আমি এই সমাধানটি পছন্দ করি এবং আমি স্বতন্ত্র কমান্ডগুলির জন্য এটি বাস্তবায়ন করব, তবে আমি এখনও Zsh এর ডিফল্ট আচরণ পরিবর্তন করার উপায় খুঁজছি।
ভিনস

4
@ ভিনস আপনার মানে কি সর্বদা ব্যাকগ্রাউন্ড প্রক্রিয়া অস্বীকার করার জন্য ডিফল্ট পরিবর্তন করা? যদি তা হয় তবে setopt nohupআপনি নিজের সাথে এটি করতে পারেন ~/.zshrc। তারপরে একটি কমান্ড পটভূমি শুরু করা &সর্বদা এটি অস্বীকার করবে। যদিও ডিফল্টভাবে zsh এখনও আপনাকে স্মরণ করিয়ে দেবে যে আপনি যখন প্রস্থান করার চেষ্টা করছেন তখন আপনার চলমান কাজ রয়েছে। আপনি এটি দিয়ে বন্ধ করতে পারেন setopt nocheckjobs
আনকো

@ আঙ্কো আমার মনে setopt nocheckjobsহয় আমি যা চাই তা করি। এখন আমি উপলভ্য বিকল্পগুলি খুঁজে পেয়েছি man zshoptions। আমি সতর্কতাটি বন্ধ করতে চাই। আমি জানি কখন আমার পটভূমি প্রক্রিয়া হয় এবং আমার এটির প্রয়োজন হয় না। আমি ব্যাকগ্রাউন্ড প্রক্রিয়াগুলি বন্ধ না করা চাই যদি না আমি সেগুলি শুরু করি nohup। আমি বর্তমানে এটি শেল ফাংশন সহ ব্যবহার করছি যা এর সাথে ব্যাকগ্রাউন্ডে পাইচার্ম চালায় nohup। আমি যখন টাইপ pycharm .করি তখন এটি চলে nohup charm $@ &। টার্মিনালটি বন্ধ করার সময় এটি বন্ধ হয় না, তবে আমি এখনও সেই সতর্কতা পেয়েছি এবং exitদুবার টাইপ করতে হবে ।
ভিনস

59

থেকে zsh ডকুমেন্টেশন :

HUP

... zsh এ, শেলটি প্রস্থান করার পরে যদি আপনার পটভূমি কাজ চলতে থাকে তবে শেলটি ধরে নিবে যে আপনি এটি হত্যা করতে চান; SIGHUPএক্ষেত্রে এটি একটি নির্দিষ্ট সিগন্যাল প্রেরণ করা হয় ... বলা হয় আপনি যদি প্রায়শই শেলটি সরে যাওয়ার পরেও এমন কাজ শুরু করেন যা আপনি চালু করেন তবে আপনি বিকল্পটি সেট করতে পারেন NO_HUPএবং ব্যাকগ্রাউন্ডের কাজগুলি একা থাকবে।

সুতরাং কেবল NO_HUPবিকল্পটি সেট করুন :

% setopt NO_HUP

আপনি যদি সতর্কতা না চান তবে হ্যাঁ।
কার্ল নরম

30

আমি খুঁজে পেয়েছি একটি সমন্বয় ব্যবহার করে যে nohup, &আর disownআমার জন্য কাজ করে, যেমন আমি স্থায়ীভাবে কাজ যখন শেল থেকে প্রস্থান করেছে চালানোর কারণ চাই না।

nohup <command> & disown

শুধু যদিও &আমার জন্য কাজ করেছে bash, আমি যখন শুধুমাত্র ব্যবহার করে পাওয়া nohup, &অথবা disownকমান্ড চলমান, একটি স্ক্রিপ্ট যে একটি জাভা রান কমান্ড কল মত, প্রক্রিয়া এখনও শেল থেকে প্রস্থান করা হয় বন্ধ করে দেয়।

  • nohupকমান্ডটি উপেক্ষা করে NOHUPএবং SIGHUPশেল থেকে সংকেত দেয়
  • & প্রক্রিয়াটিকে একটি উপকেন্দ্রে পটভূমিতে পরিচালিত করে
  • disownএকটি যুক্তি অনুসারে (আপনার কাজের তালিকায় কাজের সংখ্যার সূচক) শেলটি SIGHUPশিশু প্রসেসগুলিতে সংকেত প্রেরণে বাধা দেয় । ব্যবহার disownএকটি আর্গুমেন্ট ছাড়াই এটি সাম্প্রতিকতম কাজের ডিফল্ট ঘটায়।

আমি দেখেছি nohupএবং disownতথ্য এই পৃষ্ঠার এবং &তথ্য এই তাই উত্তর


5

আমি সাধারণত screenব্যাকগ্রাউন্ড কাজ চালিয়ে যাওয়ার জন্য ব্যবহার করি ।

1) একটি স্ক্রিন সেশন তৈরি করুন:

screen -S myScreenName

2) আপনার স্ক্রিপ্ট, পরিষেবা, ডেমোন বা যা কিছু লঞ্চ করুন

3) প্রস্থান (বিচ্ছিন্ন) সঙ্গে স্ক্রিন-সেশন

screen -d

বা শর্টকাট ALT+A then d


কয়েক শত বছর পরে - আপনি যদি আপনার সেশনটি পুনরায় শুরু করতে চান (পুনরায় যোগাযোগ):

screen -r myScreenName

যদি আপনি জানতে চান যে কোনও স্ক্রিন-সেশন রয়েছে, এর নাম এবং এর স্থিতি (সংযুক্ত বা বিচ্ছিন্ন):

screen -ls

এই সমাধানটি সমস্ত টার্মিনাল দোভাষী যেমন ব্যাশ, জেডএস ইত্যাদিতে কাজ করে। এছাড়াও দেখুন man screen


ম্যাকোস ব্যবহারকারীদের জন্য একটি নোট, স্ক্রীন থেকে বিচ্ছিন্ন করার জন্য কীবোর্ড শর্টকাটটি ছিল কন্ট্রোল + এ, তারপরে ডি। এছাড়াও এটি ছিল আমার একমাত্র বিকল্প যখন আমি কোনও প্রক্রিয়া চালাতে এবং স্টাডআউটে উপার্জন করতে থাকি, তখন স্ক্রিন লিখতে সহায়তা হত না।
বিশু

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