চলমান প্রক্রিয়াটির আউটপুট পুনঃনির্দেশকে কীভাবে পরিবর্তন করবেন?


11

আমি জানি কীভাবে আউটপুট পুনর্নির্দেশ করা যায় এবং কীভাবে এগুলিকে দমন করতে হয়। এখন, ধরুন আমি ঘটনাক্রমে কমান্ডের আউটপুট পুনঃনির্দেশ অংশটি যুক্ত করতে ভুলে গেছি (উদাঃ 2>&1বা > /tmp/mystdout) এবং আমার পটভূমি প্রক্রিয়াটি ইতিমধ্যে কিছু সময়ের জন্য চলমান আছে, আমি কি এখনও যেখানে পরিবর্তন করতে পারি stdoutএবং সেখানে stderrলিখিত হয়েছি ? আমি সত্যিই অ্যাপ্লিকেশনটিকে হত্যা এবং পুনরায় চালু না করতে চাই।

গিলস তাঁর মন্তব্যে আরও স্পষ্ট করে বলার জন্য, আমি নির্দিষ্ট পরিস্থিতিতে এই পরিস্থিতিতে এটির সাথে বেড়াতে চাই:

  • ভুল আউটপুট ফাইল
  • পুনর্নির্দেশ stderrকরতে ভুলে গেছিstdout

অথবা উভয়ের একটি সমন্বয়

যেমন আমার অ্যাপাচি চলছে এবং আমি ফাইল বর্ণনাকারী দেখতে পাচ্ছি :

/proc/8019/fd/0 -> /dev/null
/proc/8019/fd/1 -> /dev/null
/proc/8019/fd/2 -> /var/log/apache2/error.log

অন্য টার্মিনালে পরিবর্তন? নাকি কোন ফাইল? যদি আপনি বর্তমান টার্মিনাল বা একটি নতুন স্ক্রিন সেশনে সংযুক্ত হয়ে সন্তুষ্ট হন তবে দেখুন আমি কীভাবে চলমান প্রক্রিয়াটিকে অস্বীকার করব এবং এটি একটি নতুন স্ক্রিন শেলের সাথে যুক্ত করব?
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

উত্তর:


8

আপনি এটি পুনঃনির্দেশ ( https://github.com/jerome-pouiller/reredirect/ ) ব্যবহার করে করতে পারেন ।

reredirect -m /dev/null <PID>

আপনি এই জাতীয় কিছু ব্যবহার করে আপনার প্রক্রিয়াটির প্রাথমিক আউটপুট পুনরুদ্ধার করতে পারেন:

reredirect -N -O <M> -E <N> <PID>

( <M>এবং <N>পূর্বনির্দেশের পূর্ববর্তী লঞ্চ দ্বারা সরবরাহ করা হয়)।

পুনঃনির্দেশ READMEআরও ব্যাখ্যা করে যে কীভাবে অন্য কমান্ডে পুনঃনির্দেশ করা যায় বা কেবল স্টডআউট বা স্ট্ডারকে পুনর্নির্দেশ করা যায়।


3

এটা সম্ভব না. বা কমপক্ষে সহজ না। প্রক্রিয়াটির সাথে আপনার কিছু ভাগ্য জিডিবি সংযুক্ত হতে পারে এবং এটি জিডিবিতে ফিডিং করতে পারে তবে এটি সাফল্যের মতোই ক্র্যাশগুলিও সহজেই নিয়ে যেতে পারে।



এগুলি ভাগ করে নিতে নির্দ্বিধায়, আমি উত্তরটি
উস্কে দেব


1
বেশ না। অন্যান্য বাগে লিঙ্কযুক্ত সমস্ত সরঞ্জাম অন্য টার্মিনাল / স্ক্রিন সেশনে সংযুক্ত হওয়ার কথা। অন্য কোনও ফাইলে পুনর্নির্দেশ সম্পর্কে নয়। যদিও এর পরিবর্তে কোনও ফাইলকে পুনর্নির্দেশের জন্য reptyr প্যাচ করা খুব কঠিন নয়।
ডেনিস কার্সেমেকার

আমি রেপটায়ারের উত্সটিতে কিছুটা তাকিয়েছি এবং আমি উত্তরের "সহজ নয়" অংশের সাথে সর্বাধিক সম্মত হয়েছি। কিছুক্ষণ পরে এটিতে আরও গভীর ডুব নিতে পারে।
gertvdijk

2

আপনার নতুন বর্তমান টার্মিনালের সাথে অন্য একটি প্রক্রিয়া সংযুক্ত করতে আপনার reptyr ব্যবহার করা উচিত । উদাহরণস্বরূপ: GNU এর screenইউটিলিটিটি ইনস্টল করুন এবং ব্যবহার করুন এবং এটিতে reptyrঅন্যান্য প্রক্রিয়াটির পুনর্নির্দেশগুলি (এবং নিয়ন্ত্রণের টার্মিনাল) "আনতে" এবং নতুন বর্তমান টার্মিনালে ( screenপ্রক্রিয়াটি যদি আপনি চালু reptyrকরেন তবে screen) সংযুক্ত করতে কমান্ডটি চালু করুন । একটি screenঅধিবেশন থেকে এটি করার সুবিধাটি হ'ল, একবারের অধীনে screen, এরপরে এটি সংযোগ বিচ্ছিন্ন করে পুনরায় সংযোগ করা সহজ হবে (উদাহরণস্বরূপ, আপনার স্থানীয় সেশনটি বন্ধ করে দেওয়া, বাড়িতে যাওয়া এবং এটি পুনরায় খোলা)।


আপনার উত্তরের জন্য ধন্যবাদ, তবে এটি আমার ক্ষেত্রে সহায়তা করে না কারণ আমি টার্মিনাল বিচ্ছিন্নতা / পুনর্নির্মাণের বিষয়ে জিজ্ঞাসা করছি না। দয়া করে আমার প্রশ্নটি এবং নির্দিষ্টভাবে উদাহরণটি পুনরায় পড়ুন।
জার্মটভিডিজক

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