টার্মিনাল থেকে সম্পূর্ণভাবে আমি কীভাবে কোনও প্রক্রিয়া আলাদা করব?


304

আমি উবুন্টুতে আমার "কমান্ড সেন্ট্রাল" হিসাবে টিল্ডা (ড্রপ-ডাউন টার্মিনাল) ব্যবহার করি - অন্যরা যেভাবে জিনোম ডু, কুইকসিলভার বা লঞ্চি ব্যবহার করতে পারে তেমনভাবে।

তবে, যে টার্মিনালটি থেকে এটি প্রবর্তন করা হয়েছে তা থেকে কোনও প্রক্রিয়া (যেমন ফায়ারফক্স) সম্পূর্ণরূপে বিচ্ছিন্ন করার বিষয়ে আমি লড়াই করছি - যেমন এই জাতীয় (নন) শিশু প্রক্রিয়াটিকে রোধ করুন

  • মূল টার্মিনালটি বন্ধ করার সময় বন্ধ করা হয়
  • STDOUT / STDERR এর মাধ্যমে উত্সপ্রাপ্ত টার্মিনালটিকে "দূষিত" করে

উদাহরণস্বরূপ, একটি "যথাযথ" টার্মিনাল উইন্ডোতে ভিম শুরু করতে, আমি নীচের মতো একটি সাধারণ স্ক্রিপ্ট চেষ্টা করেছি:

exec gnome-terminal -e "vim $@" &> /dev/null &

তবে, এটি এখনও দূষণের কারণ ঘটায় (কোনও ফাইলের নাম পাসও কাজ করে বলে মনে হয় না)।


1
এটিও একটি ভাল প্রশ্ন। আমি মনে করি যে

এটি এই প্রশ্নের সদৃশ স্ট্যাকওভারফ্লো.com
দানা দ্য সনে

এর
ডুপ

আপনার ব্যবহারের ক্ষেত্রে সম্পূর্ণ বিচ্ছিন্নতা বর্ণনা করা হয় না।
jiggunjer

উত্তর:


344

সবার আগে; একবার আপনি কোনও প্রক্রিয়া শুরু করার পরে আপনি প্রথমে এটি বন্ধ করে (হিট Ctrl- Z) ব্যাকগ্রাউন্ড করতে পারেন এবং তারপরে bgপটভূমিতে আবার শুরু করতে টাইপ করে। এটি এখন একটি "কাজ", এবং এটি stdout/ stderr/ stdinএখনও আপনার টার্মিনালের সাথে সংযুক্ত রয়েছে।

আপনি এর শেষে "&" যুক্ত করে তত্ক্ষণাত্ পটভূমি হিসাবে প্রক্রিয়া শুরু করতে পারেন:

firefox &

নিঃশব্দ পটভূমিতে এটি চালনার জন্য, এটি ব্যবহার করুন:

firefox </dev/null &>/dev/null &

কিছু অতিরিক্ত তথ্য:

nohupএমন একটি প্রোগ্রাম যা আপনি আপনার অ্যাপ্লিকেশনটি চালানোর জন্য ব্যবহার করতে পারেন যাতে তার স্টাডাউট / স্টার্ডার পরিবর্তে কোনও ফাইলে প্রেরণ করা যায় এবং যেমন স্ক্রিপ্ট বন্ধ করে দেওয়া সন্তানের পক্ষে স্বাক্ষর করতে পারে না। তবে আপনি অ্যাপ্লিকেশন শুরু করার আগে এটি ব্যবহার করার জন্য আপনার দূরদর্শিতা থাকা উচিত। যেভাবে nohupকাজ করে, আপনি এটি কেবল চলমান প্রক্রিয়াতে প্রয়োগ করতে পারবেন না ।

disownএকটি বাশ বিল্টিন যা শেলের কাজ তালিকা থেকে শেল কাজ সরিয়ে দেয়। এই মূলত এর মানে হল যে আপনি ব্যবহার করতে পারেন না fg, bgআর এটা, কিন্তু আরো গুরুত্বপূর্ণ, যখন আপনি আপনার শেল বন্ধ এটা স্তব্ধ বা পাঠাব না SIGHUPআর যে সন্তানকে। ভিন্ন nohup, disownব্যবহার করা হয় পরে প্রক্রিয়া চালু করা হয়েছে এবং পশ্চাদপটে করা।

আপনি যা করতে পারবেন না তা হ'ল কোনও প্রক্রিয়া চালু করার পরে স্টাডাউট / স্টডার / স্টিডিন পরিবর্তন করা। কমপক্ষে শেল থেকে না। যদি আপনি আপনার প্রক্রিয়াটি চালু করেন এবং এটির স্টাডাউটটি আপনার টার্মিনালটি বলে দেয় (যা আপনি ডিফল্টরূপে করেন) তবে সেই প্রক্রিয়াটি আপনার টার্মিনালে আউটপুটে কনফিগার করা হয়েছে। প্রক্রিয়াগুলির এফডি সেটআপের সাথে আপনার শেলের কোনও ব্যবসা নেই, এটি প্রক্রিয়া নিজেই পরিচালনা করে এমন কিছু। প্রক্রিয়া নিজেই সিদ্ধান্ত নিতে পারে যে তার স্টাডাউট / স্টডার / স্টিডিনটি বন্ধ করবে কিনা, তবে আপনি নিজের শেলটিকে এটি করতে বাধ্য করতে ব্যবহার করতে পারবেন না।

ব্যাকগ্রাউন্ড প্রক্রিয়াটির আউটপুট পরিচালনা করতে, আপনার কাছে স্ক্রিপ্টগুলি থেকে প্রচুর বিকল্প রয়েছে, "নোহুপ" সম্ভবত প্রথম বিবেচনায় আসবে। তবে ইন্টারেক্টিভ প্রক্রিয়াগুলির জন্য আপনি চুপটি করতে ভুলে গেছেন ( firefox < /dev/null &>/dev/null &) আপনি আসলে কিছুই করতে পারবেন না।

আমি আপনাকে জিএনইউ করার পরামর্শ দিচ্ছি screen। প্রক্রিয়াটির আউটপুট উদ্বেগজনক হয়ে ওঠে এবং একটি নতুন ( ^Ac) খুলতে পর্দার সাহায্যে আপনি কেবল আপনার চলমান শেলটি বন্ধ করতে পারেন ।


ওহ, এবং যাইহোক, $@আপনি যেখানে এটি ব্যবহার করছেন " " ব্যবহার করবেন না ।

$@মানে $1, $2, $3..., যা আপনার কমান্ড আবর্তিত হবে:

gnome-terminal -e "vim $1" "$2" "$3" ...

এটি সম্ভবত আপনি চান না কারণ - আমরা কেবল একটি যুক্তি গ্রহণ করি। $1আপনার স্ক্রিপ্টটি কেবল একটি যুক্তি পরিচালনা করতে পারে তা দেখানোর জন্য ব্যবহার করুন ।

আপনি যে দৃশ্যে ( দিয়া gnome-terminal -e) দিয়েছেন সে ক্ষেত্রে একাধিক যুক্তি সঠিকভাবে কাজ করা সত্যিই কঠিন কারণ -eকেবল একটি যুক্তি লাগে যা শেল কমান্ড স্ট্রিং। আপনার যুক্তিগুলিকে একটিতে এনকোড করতে হবে। সেরা এবং সবচেয়ে মজবুত, বরং ক্লেদী, উপায়টি এরকম:

gnome-terminal -e "vim $(printf "%q " "$@")"

এটার জন্য অনেক ধন্যবাদ! দুঃখের সাথে আমি কেবল একটি উত্তর গ্রহণ করতে পারি। আমি "nohup $ @ &> / dev / null &" এবং "ওরফে wvim ='unch.sh জিনোম-টার্মিনাল -x vim '" দিয়ে শেষ করেছি

20
কি চমত্কারভাবে বিস্তারিত এবং তথ্যমূলক উত্তর। +1
টেকিন

1
@ হাই-অ্যাঞ্জেল যখন আপনি একটি ইন্টারেক্টিভ বাশ শেল বন্ধ করেন, তখন সমস্ত সক্রিয় কাজগুলিকে ব্যাশ করুন UP আপনি যখন Z and করেন এবং কোনও প্রক্রিয়া চালান এটি এখনও একটি কাজ it এটিকে একটি কাজ হিসাবে মুছে ফেলার জন্য, ব্যবহার করুন disown, তারপরে প্রক্রিয়াটি শেলটি বন্ধ করার পরে আপনি বাঁচতে পারবেন যেহেতু বাশ এটি আর কার্যকর করবে না।
lhunath

3
ইতিমধ্যে পৃথক স্ট্রিংয়ের সমস্যা ঠিক করার $*পরিবর্তে ব্যবহার করবেন না $@?
sjas

2
আপনি যা করতে পারবেন না তা হ'ল কোনও প্রক্রিয়া চালু করার পরে স্টাডাউট / স্টার্ডার / স্টিডিন পরিবর্তন করা। - ঠিক সত্য নয়। reptyrএই জন্য ব্যবহার করুন ।
স্টিফান সিডেল

198
nohup cmd &

nohup প্রক্রিয়া সম্পূর্ণরূপে বিচ্ছিন্ন করে (এটি ডিমনাইজ করে)


5
যদিও সংশ্লেষ মূল্যবান, তবে পরিপূর্ণতা আরও মূল্যবান। যদিও নোহুপ একটি জিএনইউ কোর্টিল, তবে কেবলমাত্র ব্যাশ-উত্তর (বা সেখানে এক নয় এমন বিষয়ে নোট করুন) এখানে উপযুক্ত হবে। তবুও ভাল উত্তর।
সীমিত প্রায়শ্চিত্ত

23
nohupশুধু SIGHUPসিগন্যাল উপেক্ষা । এটি প্রক্রিয়াটি স্বাভাবিকভাবে সম্পাদন করে। কোনও ডিমনাইজেশন নেই।
নেমো

1
@ নেমো যার অর্থ প্রক্রিয়াটি বিচ্ছিন্ন নয়, তবে initশেলটি বেরিয়ে আসলেই বিচ্ছিন্ন হয়ে যাবে (এবং একটি শিশু ) হয়ে যাবে ... ঠিক?
নলডোরিন

@ নলডোরিন হ্যাঁ শেলটি বন্ধ হয়ে গেলে প্রেরণ করা সিএইচএইচপি, যা শিশু প্রসেসটি চলমান এবং ইনিতে স্থানান্তরিত করা ছেড়ে দেবে।
নিমো

@ নেমো নোহুপ / আউটস স্ট্যান্ডার্ডকেও নিরব করে। সম্পূর্ণ বিচ্ছিন্ন করতে অস্বীকারের সাথে অনুসরণ করুন।
jiggunjer

60

আপনি যদি ব্যবহার করছেন bash, চেষ্টা করুন ; দেখতে ব্যাশ (1)disown [jobspec]

আপনি চেষ্টা করতে পারেন অন্য পদ্ধতি at now। আপনি যদি সুপারভাইজার না হন তবে আপনার ব্যবহারের অনুমতি atসীমাবদ্ধ হতে পারে।


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

1
"এট" ব্যবহার করার কথা ভাবেনি, ধারণার জন্য ধন্যবাদ!
ক্যাডারিয়ান

1
atঅন্য কারও কাছে মৃত্যুদণ্ড দেওয়ার জন্য, আমি এটি পছন্দ করি! +1
নিনসুও

1
রেফারেন্সের পয়েন্ট হিসাবে, এটি zshপাশাপাশি কাজ করে ।
কোডার

1
এছাড়াও, disownআকাঙ্ক্ষিত ফল সঙ্গে আছে বলে মনে হচ্ছে না gnome-terminal- disownইডি প্রসেস এখনো হত্যা করা হয় যখন টার্মিনাল প্রস্থান করে। আমি জানতে চাই কেন / কীভাবে।
কাইল স্ট্র্যান্ড

38

এই উত্তরগুলি পড়া, আমি প্রাথমিক ছাপে ছিলাম যে জারি nohup <command> &করা যথেষ্ট হবে। জিনোম-টার্মিনালে জেডএস চালানো, আমি আবিষ্কার করেছি যে nohup <command> &আমার শেলটি প্রস্থান করার সময় শিশুদের প্রক্রিয়া হত্যার হাত থেকে বাধা দেয় না। যদিও nohupদরকারী, বিশেষত অ-ইন্টারেক্টিভ শেলগুলির সাথে, এটি কেবল তখনই এই আচরণের গ্যারান্টি দেয় যদি সন্তানের প্রক্রিয়া SIGHUPসংকেতের জন্য হ্যান্ডলারটিকে পুনরায় সেট না করে ।

আমার ক্ষেত্রে, nohupহ্যাংআপ সংকেতগুলিকে অ্যাপ্লিকেশনটিতে পৌঁছানো থেকে বিরত রাখা উচিত ছিল, তবে শিশু অ্যাপ্লিকেশন (এই ক্ষেত্রে ভিএমওয়্যার প্লেয়ার) এর SIGHUPহ্যান্ডলারটি পুনরায় সেট করছে । ফলস্বরূপ যখন টার্মিনাল এমুলেটরটি প্রস্থান করে, এটি এখনও আপনার উপ-প্রসেসগুলি মেরে ফেলতে পারে। শেলটির কাজের টেবিল থেকে প্রক্রিয়াটি সরিয়ে দেওয়া হয়েছে তা নিশ্চিত করে এটি কেবলমাত্র আমার জ্ঞানের সমাধান করা যায়। যদি nohupকখনও কখনও যেমন শেল বিল্টিন দিয়ে ওভাররাইড করা হয় তবে এটি পর্যাপ্ত হতে পারে, যদি এটি না হয় তবে ...


disownএকটি শেল মধ্যে builtin হয় bash, zshএবং ksh93,

<command> &
disown

অথবা

<command> &; disown

যদি আপনি ওয়ান-লাইনার পছন্দ করেন এটি কাজের সারণী থেকে উপ-প্রসেসগুলি সরিয়ে ফেলার সাধারণভাবে পছন্দসই প্রভাব ফেলে। এটি দুর্ঘটনাক্রমে শিশু প্রসেসকে মোটেই সংকেত না দিয়ে টার্মিনাল এমুলেটরটি ছাড়তে দেয় allows SIGHUPহ্যান্ডলারটি দেখতে কেমন তা বিচার্য নয়, এটি আপনার সন্তানের প্রক্রিয়াটিকে হত্যা করবে না।

প্রত্যাখ্যানের পরে, প্রক্রিয়াটি এখনও আপনার টার্মিনাল এমুলেটরটির শিশু ( pstreeযদি আপনি এটিটি ক্রিয়াতে দেখতে চান তবে খেলুন ), তবে টার্মিনাল এমুলেটরটি প্রস্থান করার পরে, আপনাকে এটি init প্রক্রিয়াটির সাথে সংযুক্ত দেখতে পাওয়া উচিত। অন্য কথায়, সমস্ত কিছু যেমনটি হওয়া উচিত তেমনি আপনি সম্ভবত এটিও চান want

আপনার শেলটি সমর্থন না করলে কী করবেন disown? আমি দৃ one়ভাবে এমন একটিতে স্যুইচ করার পক্ষে দৃ strongly়তার সাথে সমর্থন করব, তবে সেই বিকল্পের অভাবে আপনার কয়েকটি পছন্দ আছে।

  1. screenএবং tmuxএই সমস্যাটি সমাধান করতে পারে তবে এগুলি অনেক বেশি ভারী ওজন সমাধান এবং এ জাতীয় কোনও সাধারণ কাজের জন্য এগুলি চালানো আমার পছন্দ নয়। আপনি সাধারণত কোনও দূরবর্তী মেশিনে টিটিটি বজায় রাখতে চান সেগুলির জন্য এগুলি আরও বেশি উপযুক্ত।
  2. অনেক ব্যবহারকারীর জন্য, আপনার শেলটি zsh এর মতো কোনও সামর্থ্য সমর্থন করে কিনা তা দেখার জন্য এটি বাঞ্ছনীয় হতে পারে setopt nohupSIGHUPশেলটি যখন প্রস্থান করে তখন তা কাজের টেবিলের কাজগুলিতে প্রেরণ করা উচিত নয় তা নির্দিষ্ট করতে এটি ব্যবহার করা যেতে পারে । আপনি শেলটি প্রস্থান করার ঠিক আগে এটিকে প্রয়োগ করতে পারেন, বা শেল কনফিগারেশনে এটি যুক্ত করতে পারেন ~/.zshrcযদি আপনি সর্বদা এটি চান।
  3. কাজের টেবিল সম্পাদনা করার জন্য একটি উপায় সন্ধান করুন। আমি এই না একটি উপায় খুঁজে পাইনি tcshবা csh, যা কিছুটা ধকল হয়।
  4. কাঁটাচামচ বন্ধ করার জন্য এবং একটি ছোট সি প্রোগ্রাম লিখুন exec()। এটি একটি খুব দুর্বল সমাধান, তবে উত্সটিতে কেবল কয়েক ডজন লাইন থাকা উচিত। তারপরে আপনি সি প্রোগ্রামে কমান্ডলাইন আর্গুমেন্ট হিসাবে কমান্ডগুলি পাস করতে পারবেন এবং এইভাবে কাজের সারণিতে একটি প্রক্রিয়া নির্দিষ্ট প্রবেশ এড়াতে পারবেন।

29
  1. nohup $COMMAND &
  2. $COMMAND & disown
  3. setsid command

আমি খুব দীর্ঘকাল ধরে 2 নম্বর ব্যবহার করছি, তবে 3 নম্বরটি ঠিক তেমন কাজ করে। এছাড়াও, disownএর nohupপতাকা রয়েছে -h, এর সাথে সমস্ত প্রক্রিয়া -aঅস্বীকার করতে পারে এবং এর সাথে চলমান সমস্ত প্রক্রিয়া অস্বীকার করতে পারে -ar

নীরবতা সম্পন্ন হয় $COMMAND &>/dev/null

আশাকরি এটা সাহায্য করবে!


স্বল্প ও মধুর; এই খুব সহায়ক সারসংক্ষেপ জন্য ধন্যবাদ!
শেলজহান

আমি বিশ্বাস করতে পারি না আমি এখনও এই পোস্টের জন্য বিজ্ঞপ্তি পেয়েছি ...
মিঃ মিনিটি ফ্রেশ

9

আমি মনে করি পর্দা আপনার সমস্যার সমাধান করতে পারে


9

tcsh এ (এবং সম্ভবত অন্যান্য শেলগুলিতেও), আপনি প্রক্রিয়াটি আলাদা করতে বন্ধনী ব্যবহার করতে পারেন।

এর সাথে তুলনা করুন:

> jobs # shows nothing
> firefox &
> jobs
[1]  + Running                       firefox

এটি:

> jobs # shows nothing
> (firefox &)
> jobs # still shows nothing
>

এটি ফায়ারফক্সকে কাজের তালিকা থেকে সরিয়ে দেয়, তবে এটি এখনও টার্মিনালের সাথে আবদ্ধ; আপনি যদি 'ssh' এর মাধ্যমে এই নোডে লগ ইন করে থাকেন তবে লগ আউট করার চেষ্টা করলেও ssh প্রক্রিয়াটি স্তব্ধ হয়ে যাবে।


9

বাশের জন্য সর্বাধিক সহজ এবং একমাত্র সঠিক উত্তর:

command & disown

আপনাকে প্রক্রিয়াটি টার্মিনাল থেকে আলাদা করতে হবে না, তবে শেল থেকে।


7

উদাহরণস্বরূপ সাব-শেলের মাধ্যমে tty শেল রান কমান্ড বিচ্ছিন্ন করা

(কমান্ড) &

প্রস্থান যখন ব্যবহৃত টার্মিনাল বন্ধ কিন্তু প্রক্রিয়া এখনও জীবিত।

পরীক্ষা -

(sleep 100) & exit

অন্য টার্মিনাল খুলুন

ps aux | grep sleep

প্রক্রিয়া এখনও জীবিত।


এটাই আমার দরকার ছিল। আমি পাতলা পাঠ্যের জন্য একটি কনসোল শর্টকাট যুক্ত করার চেষ্টা করছিলাম এবং এটি পুরোপুরি কার্যকর হয়, আমি এখানে যা শেষ করেছি তা এখানে রয়েছে: ("/ opt / sublime Text 2 / sublime_text" $ @) &
রন ই

5

কোনও কাজের ব্যাকগ্রাউন্ডিং এবং ফোরগ্রাউন্ডিং করা সম্ভবত প্রতিটি ইউনিক্স সিস-অ্যাডমিনকে জানা উচিত প্রথম বিষয়গুলির মধ্যে একটি।

বাশ দিয়ে এটি কীভাবে করা হয় তা এখানে:

./script.sh
# suspend process
{ctrl-Z}
# background process
bg
# list all backgrounded jobs
jobs
# bring it back to foreground
fg

4

আপনি নোহপ কমান্ডটি ব্যবহার করে আপনার কমান্ডটি চালাতে পারেন, এটি আপনার প্রক্রিয়াটিকে পৃথক করে এবং প্রদত্ত ফাইলে আউটপুটগুলি পুনঃনির্দেশিত করে ... তবে আমি নিশ্চিত নই যে আপনার প্রয়োজনটি ঠিক তাই ..


আমি শপথ করে বলতে পারি যে আমি এক্সিকিউটিভ ব্যবহারের আগে নোহুপ চেষ্টা করেছি - তবে দৃশ্যত সঠিকভাবে হয়নি, কারণ এটি এর মতো কাজ করে: নোহোপ জিনোম-টার্মিনাল - "" উইম $ @ "&> / দেব / নাল &

2

ব্যবহার করে দেখুন ডেমন - আপনার বন্ধুত্বপূর্ণ প্যাকেজ ম্যানেজার থেকে উপলব্ধ হবে এবং অগ্রপশ্চাৎ টার্মিনাল থেকে নিজেকে disassociating প্রতিটি পথ যত্ন নিতে হবে।


2

আপনার বাশার্ক / zshrc এ এটি যুক্ত করুন:

detach() {
  "$@" 1>/dev/null 2>/dev/null &; disown
}

তারপরে আপনি এইভাবে অস্বীকার করা আদেশগুলি চালাতে পারেন:

detach gedit ~/.zshrc

1

আমার .bashrc- এ, এই উদ্দেশ্যটির জন্য আমার এই ফাংশনগুলি রয়েছে:

function run_disowned() {
    "$@" & disown
}

function dos() {
    # run_disowned and silenced

    run_disowned "$@" 1>/dev/null 2>/dev/null
}

dosটার্মিনাল থেকে পৃথক পৃথকভাবে চালানোর জন্য একটি কমান্ডের উপ-অনুকরণ করুন ।

ফাংশন সঙ্গে কাজ করার লেখা আছে bashএবং zsh


1
আমি সামান্য কেন এই উত্তর এক ফাংশন অন্য আবৃত ব্যবহার করে, যখন তার যথেষ্ট শুধু ভালো শরীরের সঙ্গে এক ফাংশন ব্যবহার করতে হিসাবে বিভ্রান্ত করছি: ( "$@" & disown) &> /dev/null। এটি ব্যবহার করাও খুব বেশি অর্থবোধ করে না 1>এবং 2>কারণ আপনি ব্যবহার করছেন disown, যার অর্থ আপনি ব্যাশ ব্যবহার করছেন এবং ব্যাশে আপনি সহজেই &>
স্টাডআউট

আমার এটি দুটি ফাংশন হিসাবে রয়েছে কারণ (1) আমার মনে হয় এইভাবে পড়া আরও সহজ এবং (2) run_disownedআমার ডটফাইলে অন্য জায়গায় আমার কার্যকারিতা দরকার । আপনি &>অবশ্যই বিষয়টি সম্পর্কে ঠিক বলেছেন ।
mic_e

0

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


0

এটি করার জন্য আমি নীচের স্ক্রিপ্টটি ব্যবহার করি। এটি টার্মিনালে প্রিন্টিং প্রক্রিয়াটি বন্ধ করে, এর সাথে বিচ্ছিন্ন করে nohupএবং কমান্ডটি এর মধ্যে শেষ হলে রিটার্নের স্ট্যাটাস সহ প্রস্থান করে TIMEOUT

#!/bin/bash

TIMEOUT=0.1

CMD=( "$@" )
#Could have some shortcuts here, e.g. replace "somefile.c" with "gedit somefile.c"

#use nohup to run the command, suppressing its output and allowing the terminal to be closed
#also send nohup's output to /dev/null, supressing nohup.out
#run nohup in the background so this script doesn't block
#print the command for debugging and to see bash variable expansion
printf "%q " "${CMD[@]}"
echo
nohup "${CMD[@]}" >/dev/null 2>&1 &
NOHUP_PID=$!

#kill this script after a short time, exiting with success status - command is still running
#this is needed as there is no timeout argument for `wait` below
MY_PID=$$
trap "exit 0" SIGINT SIGTERM
sleep $TIMEOUT && kill $MY_PID 2>/dev/null & #ignore "No such process" error if this exits normally

#if the command finishes before the above timeout, everything may be just fine or there could have been an error
wait $NOHUP_PID
NOHUP_STATUS=$?
#print an error if there was any. most commonly, there was a typo in the command
[ $NOHUP_STATUS != 0 ] && echo "Error: $CMD"
#return the exit status of nohup, whatever it was
exit $NOHUP_STATUS

ব্যবহারের উদাহরণ:

>>> run false
false
Error: false
>>> echo $?
1
>>> run true
true
>>> run sleep 10
sleep 10
>>>


-1

অনেক উত্তর nohup ব্যবহার পরামর্শ দেওয়া হয়েছে । আমি বরং pm2 ব্যবহার করার পরামর্শ দিচ্ছি । ব্যবহার pm2 উপর nohup আবেদন এবং আরো অনেক অন্যান্য বৈশিষ্ট্য জন্য লগ ফাইল বজায় রাখা অনেক সুবিধা, অ্যাপ্লিকেশন জীবিত রাখার মত রয়েছে। আরও বিশদের জন্য এটি পরীক্ষা করে দেখুন

Pm2 ইনস্টল করতে আপনার এনপিএম ডাউনলোড করতে হবে । ডেবিয়ান ভিত্তিক সিস্টেমের জন্য

sudo apt-get install npm

এবং রেডহাটের জন্য

sudo yum install npm

অথবা আপনি এই নির্দেশাবলী অনুসরণ করতে পারেন । এনপিএম ইনস্টল করার পরে এটি পিএম 2 ইনস্টল করতে ব্যবহার করুন

npm install pm2@latest -g

এটি হয়ে গেলে আপনি নিজের আবেদনটি শুরু করতে পারেন

$ pm2 start app.js              # Start, Daemonize and auto-restart application (Node)
$ pm2 start app.py              # Start, Daemonize and auto-restart application (Python)

প্রক্রিয়া পর্যবেক্ষণের জন্য নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:

$ pm2 list                      # List all processes started with PM2
$ pm2 monit                     # Display memory and cpu usage of each app
$ pm2 show [app-name]           # Show all informations about application

অ্যাপের নাম বা প্রক্রিয়া আইডি ব্যবহার করে প্রক্রিয়াগুলি পরিচালনা করুন বা সমস্ত প্রক্রিয়া একসাথে পরিচালনা করুন:

$ pm2 stop     <app_name|id|'all'|json_conf>
$ pm2 restart  <app_name|id|'all'|json_conf>
$ pm2 delete   <app_name|id|'all'|json_conf>

লগ ফাইল পাওয়া যাবে

$HOME/.pm2/logs #contain all applications logs

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

@ সেরজিও আপনার পছন্দসই অ্যাপ্লিকেশনটি ব্যবহার করা পছন্দ করুন।
হ্যাকগুলি

এই বছর বেশ কয়েকটি প্রকাশনা করা হয়েছে (এক 4 দিন আগে), সুতরাং আমি দেখছি না কিভাবে / কেন আপনি মনিটকে অবহেলিত অ্যাপ্লিকেশন বলে মনে করতে পারেন। @see mmonit.com/monit/changes
সেরজিও

আমি নোহুপ সম্পর্কে বলছিলাম।
হ্যাক 14

1
nohupএকটি সরল স্ট্যান্ডার্ড POSIX কমান্ড, একই মন্তব্য: এটি হ্রাস করা উপায় নয়। @see unix.com/man-page/posix/1p/nohup
সেরজিও

-1

যদি আপনার লক্ষ্যটি টার্মিনাল উইন্ডোটি প্রায় না রেখে কমান্ড লাইন অ্যাপ্লিকেশনটি চালু করা হয় তবে আপনি Alt-F2 দিয়ে টার্মিনালটি চালু করার পরে অ্যাপ্লিকেশনটি চালানোর চেষ্টা করতে পারেন।

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