কনডোল থেকে কোনও লগ ফাইলে কোনও পটভূমির কাজের 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.