কনডোল থেকে কোনও লগ ফাইলে কোনও পটভূমির কাজের stdout / stderr পুনঃনির্দেশ?


9

আমি সবেমাত্র একটি চাকরি চালাচ্ছি (foo.sh ধরুন)।

./foo.sh
[Press Ctrl-Z to stop]
bg  # enter background

এবং এটি stdout এবং stderr এ আউটপুট জেনারেট করে। বর্তমান স্ক্রিনের পরিবর্তে স্ট্যাডআউট এবং স্টডারকে অন্য ফাইলে পুনর্নির্দেশ করার কোনও পদ্ধতি আছে কি?


এটিকে এফজিতে আনুন, আউটপুটটিকে পুনর্নির্দেশ করুন এবং এটি আবার বিজিতে প্রেরণ করুন।
আলফাসিন

উত্তর:


16

স্পষ্টতই আমি আপনার প্রশ্নটি প্রথমবার ভুলভাবে পড়েছি, সুতরাং আমার আপডেট উত্তরটি এখানে:

আপনি আপনার প্রোগ্রামটিকে ব্যাকগ্রাউন্ডে পাঠানোর পরে, আপনাকে প্রথমে এর পিআইডিটি সন্ধান করতে হবে

pgrep foo.sh

তারপরে আপনি gdbসেই প্রক্রিয়াটি সংযুক্ত করতে ব্যবহার করতে পারেন

gdb -p <PID>

ইন gdbতারপর আপনি পরিবর্তন যেখানে এই প্রোগ্রামের লিখেছেন

p dup2(open("/path/to/file",577, 420), 1)
p dup2(1, 2)

তারপরে আপনি প্রক্রিয়া থেকে বিচ্ছিন্ন হয়ে প্রস্থান করবেন gdb

detach
quit

একটু ব্যাখ্যা

  • 577 সমতুল্য O_CREAT|O_WRONLY|O_TRUNC
  • 420 সমতুল্য S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH
  • সুতরাং কলটি openফাইলটি খোলে এবং এটি উপস্থিত থাকলে 0 বাইটে কেটে যায় বা উপস্থিত না থাকলে সঠিক ফাইল অনুমতি নিয়ে একটি নতুন তৈরি করে
  • প্রথম কল dup2করার জন্য ফাইল বর্ণনাকারী কল দ্বারা ফিরে সদৃশ openবর্ণনাকারী দায়ের করতে 1(যা stdout)
  • দ্বিতীয় কলে dup2ফাইল বর্ণনাকারী সদৃশ 1করার 2(যা stderr)

1
-1। যে প্রশ্নটি করা হয়েছিল তার উত্তর দেয় না। বিশেষত, কিভাবে পটভূমি কাজ থেকে আউটপুট পুনর্নির্দেশ করা যায় ।
স্টিভেন সোমবার

1
হ্যাঁ, দুঃখিত, প্রশ্নটি ভুল করে পড়ে এখনই সংশোধন করুন
s.wagner

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