আমি কি ইতিমধ্যে শুরু হওয়া প্রক্রিয়াটি নোপ / স্ক্রিন করতে পারি?


259

আমি এসএসএইচ ধরে দীর্ঘ-চলমান ডেটা মাইগ্রেশন স্ক্রিপ্টগুলির কয়েকটি টেস্ট-রান করছি। ধরা যাক আমি 4 টা নাগাদ স্ক্রিপ্ট চালানো শুরু করি; এখন, 6 টা প্রহর ঘুরে বেড়াচ্ছে, এবং এই সব না করার জন্য আমি নিজেকে অভিশাপ দিচ্ছি screen

কোনও nohupপ্রক্রিয়া "প্রতিবিম্বিতভাবে" করার কোনও উপায় আছে , বা আমার সারা রাত আমার কম্পিউটার অনলাইনে ছেড়ে দেওয়ার দরকার আছে? যদি আমি ইতিমধ্যে শুরু করেছি এমন কোনও প্রক্রিয়া screen/ nohupকোনও প্রক্রিয়াতে সংযুক্ত হওয়া সম্ভব না হয় তবে কেন? পিতা-মাতা / সন্তানের ক্রিয়াটি কীভাবে ইন্টারঅ্যাক্ট করে তার সাথে কিছু করার? (আমি এমন কোনও "না" উত্তর গ্রহণ করব না যা কমপক্ষে 'কেন' - প্রশ্নটির সমাধান করে না - দুঃখিত;))


4
সবেমাত্র একটি আকর্ষণীয় ব্লগ পোস্ট দেখেছি disownব্লগস.অরাকল.com
entry/

উত্তর:


211

আপনি যদি ব্যাশ ব্যবহার করছেন তবে আপনি চালাতে পারেন disown -h job

ত্যাজ্য করা

disown [-ar] [-h] [jobspec ...]

বিকল্পগুলি ব্যতীত প্রতিটি জবস্পেক সক্রিয় কাজের সারণী থেকে সরানো হবে। যদি -hবিকল্পটি দেওয়া হয়, কাজটি টেবিল থেকে সরানো হয় না, তবে চিহ্নিত করা হয় যাতে শেলটি যদি একটি SIGHUP পায় তবে SIGHUP কাজটিতে প্রেরণ করা হবে না। তাহলে jobspec উপস্থিত নেই, এবং কেউই -aকিংবা -rবিকল্প সরবরাহ করা হয়, বর্তমান কাজ ব্যবহার করা হয়। যদি কোনও জবস্পেক সরবরাহ না করা হয় তবে -a বিকল্পটির অর্থ সমস্ত কাজ সরিয়ে বা চিহ্নিত করা; -rএকটি jobspec যুক্তি ছাড়া বিকল্প কাজ চলমান অপারেশন নিষিদ্ধ।


অসাধারণ; আমি আশা করছিলাম যে এটির মতো কিছু চালু হবে।
ওজ্রাক

7
জীবন অন্যায় হতে পারে। গার্পার এবং আমি প্রায় একই সময়ে এটি পোস্ট
করছিলাম

4
আপনি আমার নায়ক
টমাস ডিগানান

9
অস্বীকৃতি বাশ নির্দিষ্ট নয়। এটি zsh, ksh93, ... এও আছে
ফিল পি

2
আমি খুঁজে পেয়েছি যে আপনি disown %1যদি fg বা bg এর বিপরীতে যেখানে 1 মাত্র bg 1 জবস্পেক হয় তবে
tutorials/

81

Reptyr ব্যবহার করুন

পুনরায় পড়া থেকে:

reptyr - A tool for "re-ptying" programs.
-----------------------------------------

reptyr is a utility for taking an existing running program and
attaching it to a new terminal. Started a long-running process over
ssh, but have to leave and don't want to interrupt it? Just start a
screen, use reptyr to grab it, and then kill the ssh session and head
on home.

USAGE
-----

  reptyr PID

"reptyr PID" will grab the process with id PID and attach it to your
current terminal.

After attaching, the process will take input from and write output to
the new terminal, including ^C and ^Z. (Unfortunately, if you
background it, you will still have to run "bg" or "fg" in the old
terminal. This is likely impossible to fix in a reasonable way without
patching your shell.)

এর লেখকের কয়েকটি ব্লগ পোস্ট:


আমি অন্তর্নির্মিত সরঞ্জামগুলি (যেমন অস্বীকার) দিয়ে আঁকতে যাচ্ছি, তবে এটি reptyr এর মতো নমনীয় নয়। +1
ojrac

22

এক tty থেকে আপনার বর্তমান tty একটি প্রক্রিয়া চুরি করতে, আপনি এই হ্যাক চেষ্টা করতে পারেন:

http://www.ucc.asn.au/~dagobah/things/grab.c

বর্তমান লিনাক্স / গ্লিবসি সংস্করণগুলিতে সংকলন করার জন্য এটি কিছু পুনর্নির্মাণের প্রয়োজন, তবে এখনও কাজ করে।


1
ব্যতিক্রমীভাবে দুর্দান্ত।
ওজ্রাক

16

যখন একটি প্রক্রিয়া শুরু stdin, stdout- এ এবং stderr সংযুক্ত আছেন কিছু । কমান্ড শুরু হয়ে গেলে সাধারণত আপনি এটি পরিবর্তন করতে পারবেন না। আপনি যে ক্ষেত্রে বর্ণনা করছেন, সম্ভবত এটি ssh সেশনের সাথে সম্পর্কিত t নাহুপ বেশ কিছু করে ...

command < /dev/null > nohup.out 2>&1

এটি, STDIN কে / dev / নাল, STDOUT কোনও ফাইলে এবং STDERR কে STDOUT এ সেট করে। স্ক্রিনটি ttys স্থাপনের সাথে জড়িত আরও পরিশীলিত কাজ করে যা নিজের দিকে সরাসরি থাকে।

আমি একটি চলমান প্রক্রিয়া retroactively nohup বা স্ক্রীনাইজ কোন উপায় জানি না। আপনি যদি / proc / $ pid / fd তে সিডি করেন এবং 0, 1 এবং 2 এর দিকে কী দেখেন।

অস্বীকার করার সাথে আপনার ভাগ্য ভাল হতে পারে তবে প্রক্রিয়াটি STDIN, STDOUT বা STDERR এর সাথে কিছু করার চেষ্টা করে না তবে।


2
ভাল মন্তব্যের জন্য +1। সেন্ট (দিন | আউট | এরর) হ'ল সমস্যাটির অর্ধেক অংশ এবং পরবর্তী দিকে আমি যখন এই জ্যামে আছি তখন কোথায় সন্ধান করা উচিত সে সম্পর্কে পরামর্শটি আমি প্রশংসা করি।
ওজ্রাক

6
আপনি আসলে এটি বেশিরভাগ ইউনিক্সে পরিবর্তন করতে পারেন। এটি একটি জঘন্য হ্যাক। আমি এটা ভালোবাসি. :) আপনি যা করছেন তা হ'ল পিট্রেসের মতো ডিবাগ সমর্থন ব্যবহার করে প্রক্রিয়াটির সাথে সংযুক্ত হন, তারপরে প্রক্রিয়াটিকে ডুপ 2 () কল করতে বাধ্য করুন 0,1,2 কে অন্য ফাইলহ্যান্ডলে পুনরায় সংযুক্ত করতে।
ঝান লিংস

2
হ্যাঁ, আপনি এটি পরিবর্তন করতে পারেন। প্রক্রিয়াটি (সিগস্টপ) থামিয়ে, এবং এফডি 0, 1, 2 এর জন্য ফাইল বর্ণনাকারীদের সংশোধন করে Then তারপরে পুনরায় আরম্ভ করা (সিগকন্ট)।
মাইকেল মার্টিনেজ

13

ক্রিওপিড হ'ল গ্র্যাঙ্ক। সি এর লেখকের আরও বিকাশ যা কোনও ফাইলকে একটি প্রক্রিয়া হিমায়িত করে, যা আপনি প্রক্রিয়াটি পুনরায় শুরু করার জন্য (স্ক্রিনের অভ্যন্তরে) চালান।


1
নিস! প্রক্রিয়া স্থানান্তর সম্পর্কে আমার মাস্টারের গবেষণামূলক প্রবন্ধে ক্রিওপিড ব্যবহার করার চেষ্টা করেছি, তবে আমি যা কিছু করি না কেন এটি সর্বদা কাজ করতে ব্যর্থ হয়েছিল। শেষ অবধি, আমাকে লিনাক্সের একটি প্রাচীন সংস্করণ সহ ডানক্যাপ্ট ব্যবহার করতে হয়েছিল। আপনি সম্ভবত ক্রিওপিডের বিকাশের সাথে জড়িত? আমি দেখতে পাচ্ছি যে আপনার নামটি লেখকের ডোমেনের সাথে সমান।
জুলিয়ানো

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

12

আমি কেবল পর্দার অংশের কারণ ছাড়াই আপনাকে একটি সাধারণ "না" দিতে পারি, আপনি নিজেই কারণটিতে আগ্রহী হবেন।

তবে আপনি চেষ্টা করেছেন disown(বাশ বিল্টিন)

~ $ echo $SHELL
/bin/bash
~ $ type disown
disown is a shell builtin
~ $ help disown
disown: disown [-h] [-ar] [jobspec ...]
     By default, removes each JOBSPEC argument from the table of active jobs.
    If the -h option is given, the job is not removed from the table, but is
    marked so that SIGHUP is not sent to the job if the shell receives a
    SIGHUP.  The -a option, when JOBSPEC is not supplied, means to remove all
    jobs from the job table; the -r option means to remove only running jobs.


5

আমি সম্প্রতি নিউকার্সের লিঙ্কটি দেখেছি , এটি একটি স্ক্রিনের মতো ইউটিলিটি যা লাইবকাচা, রঙিন এস্কি-আর্ট লাইব্রেরি ব্যবহার করে নির্মিত। অন্যান্য বৈশিষ্ট্যগুলির মধ্যে এটি একটি বিদ্যমান প্রক্রিয়াটি ধরার এবং এটি আপনার নিকারস (স্ক্রিন) সেশনের অভ্যন্তরে পুনরায় প্যারেন্ট করার ক্ষমতা নিয়ে গর্ব করে।

আমি তবে এটি ব্যবহার করি নি, সুতরাং এটি কাজ করে কিনা তা নিয়ে আমি মন্তব্য করতে পারি না।


2

আমি সম্ভবত এটিকে স্বল্প ভাবছি তাই আমাকে সংশোধন করতে নির্দ্বিধায় (আমি ইতিমধ্যে অস্বীকার সম্পর্কে শিখেছি!) ... কমপক্ষে পটভূমিতে প্রক্রিয়াটি চালানোর জন্য কোনও সিটিআরএল-জেড এবং "বিজি" কাজ করবে না? বা মূল সমস্যাটি কি এটি চলাকালীন আপনি এখনও STDOUT দেখতে চান?


1
এটি এখনও প্রক্রিয়াটিকে ধ্বংস করে দেবে যখন মালিকানাধীন টিটি মারা যায়, সুতরাং ওপিকে যে কমান্ডটি চালানোর নির্দেশ দিয়েছিল সেখানে বাক্সটি ফেলে রাখা উচিত, যা সে এড়াতে চায়
সার্ভারহরর

ঠিক আছে আমি এটি কিনব। ব্যাখ্যা করার জন্য ধন্যবাদ. সুতরাং অস্বীকার করা - পরামর্শগুলি অবশ্যই আমার চেয়ে অনেক বেশি স্মার্ট
দেখায়

1
: আপনি এখনও এই কাজ করতে পারে, শুধু পরে আপনি -h অস্বীকার করতে চাই stackoverflow.com/a/625436/705198
AndrewPK

2

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


2

আপনি প্রক্রিয়া আউটপুট gdb দিয়ে ফাইলটিতে পুনর্নির্দেশ করতে পারেন

https://blog-en.openalfa.com/how-to-detach-from-the-terminal-a-running-process-in-linux

এবং তারপর এটি অস্বীকার করুন

আপডেট: উবুন্টু 18.04 এ আমাকে sudo এবং কিছুটা আলাদা জিডিবি কমান্ড দিয়ে জিডিবি চালাতে হয়েছিল:

p (int)dup2(open("/tmp/test.stdout", 1), 1)


জিডিবির দুর্দান্ত ব্যবহার, ধন্যবাদ!
ওজরাক

1

আমি কমান্ড-লাইন ব্রাউজারটি ব্যবহার করতে nohup(বা অনুরূপ) ব্যবহার করতে চেয়েছিলাম এবং linksজটিল প্রমাণীকরণ প্রক্রিয়া এবং এএসপি.এনইটি ওয়েবসাইট থেকে একটি ফাইল ডাউনলোড করার পরে এটিতে সংযুক্তি যুক্ত করতে চেয়েছিলাম যাতে কাজটি করা কঠিন হয়ে পড়েছিল সাথে curl/ wget

অবশেষে আমি ব্যবহারটি শেষ করেছি tmuxযা কাজটি দুর্দান্তভাবে সমাধান করেছে:

  1. চালান tmux
  2. আপনার অ্যাপটি চালান ( linksআমার ক্ষেত্রে) এবং এটিকে চালিয়ে যান
  3. এসএসএইচ সেশন বন্ধ করুন, অ্যাপটি চলমান থাকবে
  4. পরে একই মেশিনে এসএসএইচের সাথে সংযুক্ত হন এবং tmux attachঅ্যাপটিকে স্ক্রিনে ফিরিয়ে আনতে দৌড়ান

tmux দুর্দান্ত - তবে নোহপ বা স্ক্রিনের মতো এটি কেবল তখনই কাজ করে যদি আপনি নিজের প্রক্রিয়া শুরু করার আগে এটি ব্যবহার করেন। এই প্রশ্নটি সেই সময়গুলি সম্পর্কে যখন আপনি বুঝতে পারেন যে আপনার প্রক্রিয়া ইতিমধ্যে চালু হওয়ার পরে আপনার tmux প্রয়োজন।
ojrac

-1

সেশনের সময় শেষ হওয়ার বিষয়ে আপনি কি চিন্তিত? সেক্ষেত্রে আপনি Ctrl-z এবং প্রক্রিয়াটি বিজি করতে পারবেন, এবং তারপরে সেশনটিকে "পিং -t লোকালহোস্ট" বা "শীর্ষ" এর মতো করে বাঁচিয়ে রাখার জন্য সামান্য কিছু রেখেছিলেন।

যদি আপনি লগআউট করতে চান তবে আমি ভয় করি যে আমি অন্যান্য মন্তব্যে যুক্ত করতে পারব না।


এটা লগআউট জিনিস।
ওজরাক

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