দেখার জন্য একটি প্রক্রিয়া আউটপুট সংযুক্ত করুন


110

আমি কীভাবে কোনও অ্যাপ্লিকেশন আউটপুটে একটি কনসোল / টার্মিনাল-ভিউ যুক্ত করব 'যাতে এটি কী বলছে তা আমি দেখতে পারি?

অ্যাপ্লিকেশনটি না মেরে আমি কীভাবে কোনও অ্যাপ্লিকেশন আউটপুট থেকে আলাদা করব?

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


1
আপনার প্রক্রিয়াটিতে কি ডিবাগ প্রতীক রয়েছে? এটি কি পরিবেশের পরিবেশে চলে? এবং যদি তাই হয় তবে আপনার কি কখনও থামার দরকার নেই?
yves বাউমাস

আমি যখন কিয়নোর মতো শেষ ব্যবহারকারী প্রোগ্রামগুলি সহ স্থিতিশীলতার সমস্যাগুলি পেয়েছি (আমার শব্দটি ক্র্যাশ করে এবং মেরে ফেলে) আমি কীভাবে / কেন এটি ক্র্যাশ হয়েছিল তা জানতে সক্ষম হতে চাই যাতে আমি এটি স্থির করতে কাজ করতে পারি। এটি এমন একটি প্রোগ্রাম নয় যা আমি বিকাশ করছি তবে শ্যুটিংয়ের সমস্যার জন্য আমি এমন কৌশলটি জানতে চাই। আমি আপনার পরামর্শ নীচে চেষ্টা করব।
আগ্রাসিত

উত্তর:


17

এখানে কয়েকটি বিকল্প রয়েছে। একটি হ'ল কমান্ডের আউটপুট কোনও ফাইলে পুনর্নির্দেশ করা এবং তারপরে রিয়েল টাইমে সেই ফাইলটিতে যুক্ত হওয়া নতুন লাইনগুলি দেখতে 'লেজ' ব্যবহার করুন।

আরেকটি বিকল্প হ'ল আপনার প্রোগ্রামটি 'স্ক্রিন'-এর ভিতরে চালু করা, যা পাঠ্য-ভিত্তিক টার্মিনাল অ্যাপ্লিকেশন sort স্ক্রিন সেশনগুলি সংযুক্ত এবং পৃথক করা যায়, তবে কেবলমাত্র একই ব্যবহারকারীর দ্বারা ব্যবহার করা বোঝানো হয়, সুতরাং আপনি যদি এটি ব্যবহারকারীর মধ্যে ভাগ করতে চান তবে এটি পাছার একটি বড় ব্যথা।


1
"এখানে কয়েকটি বিকল্প রয়েছে। একটি হ'ল কমান্ডের আউটপুট কোনও ফাইলে পুনর্নির্দেশ করা এবং তারপরে রিয়েল টাইমে সেই ফাইলটিতে যুক্ত হওয়া নতুন লাইনগুলি দেখতে 'লেজ' ব্যবহার করুন" " এটি ইতিমধ্যে চলমান অ্যাপ্লিকেশনগুলির সাহায্যে করা যেতে পারে?
আগ্রাসন 21

2
ফাইলটিতে যেমন লেখা আছে আউটপুট পেতে আপনার সম্ভবত লেজ -f $ log_file প্রয়োজন। এছাড়াও, না, ইতিমধ্যে চলমান অ্যাপ্লিকেশনটি দিয়ে এটি করার কোনও উপায় আমার জানা নেই।
ভারখন 21

@ অ্যাগিগিটান: না existing বিদ্যমান অ্যাপ্লিকেশনগুলির জন্য আপনাকে সেগুলি পুনরায় চালু করতে হবে, কারণ তারা ইতিমধ্যে নিয়ন্ত্রণকারী টার্মিনালে তাদের I / O কে আবদ্ধ করেছে।
ডন ওয়ারভে


286

আমি মনে করি আমার এখানে একটি সহজ সমাধান আছে। কেবল একটি ডিরেক্টরি সন্ধান করুন যার নামটি আপনি যে পিআইডি সন্ধান করছেন তার সাথে মিলে যায়, সিউডো-ফাইল সিস্টেমের নীচে /procপথের নীচে অ্যাক্সেসযোগ্য । সুতরাং যদি আপনার কোনও প্রোগ্রাম চলছে, যার আইডি 1199 এর cdমধ্যে রয়েছে:

$ cd /proc/1199

তারপরে fdনীচের ডিরেক্টরিটি সন্ধান করুন

$ cd fd

এই fdডিরেক্টরিতে ফাইল-বর্ণনাকারী অবজেক্টগুলি ধরে রাখে যা আপনার প্রোগ্রামটি ব্যবহার করছে (0: stdin, 1: stdout, 2: stderr) এবং আপনার কেবলমাত্র tail -fএকটি প্রয়োজন - এক্ষেত্রে stdout):

$ tail -f 1

9
tailআমার ক্ষেত্রে যেমন আউটপুটটিকে অন্য কোনও প্রক্রিয়াতে ইনপুটটির জন্য পুনঃনির্দেশ করা হয়েছিল আমি সেভাবে ব্যবহার করতে পারিনি , তবে moreআমাকে বর্তমান তথ্য দেখিয়েছে।
gaমেগা

10
এই সাইটে সবচেয়ে riveting পোস্ট!
রবার্ট

2
moreআমার জন্য কাজ করছে। নোড প্রক্রিয়াতে উবুন্টু 14.04
শিহ-মিন লি

1
এটি আমার জন্য জাভা প্রক্রিয়া নিয়ে কাজ করছে না যা System.out.println কল করে। / Proc / [পিআইডি] / এফডি / 1 তে কোনও আউটপুট নেই
নিক

1
নীচে ব্যবহার করে একটি প্রজনন তৈরি করার চেষ্টা করা হয়েছিল, তবে কোনও ফলসই হয়নি: `` ock ock ডকার রান - এটি - নাম ধারক 1 উবুন্টু বাশ -c -i "COUNT = 0; সত্য হলেও; ইকো নাচের মেঝে বীটকে চালিয়ে যান; (( COUNT ++)); ঘুম 1; প্রতিধ্বনি \ "গণনাটি হল: \ $ {COUNT} \"; সম্পন্ন; " Another `another অন্য টার্মিনালে: ock` `ডকার
এক্সিকিউট -আইটি

54

আমি এই ঠিক একই জিনিসটির সন্ধান করছিলাম এবং পেয়েছি যে আপনি করতে পারেন:

strace -ewrite -p $PID

এটি আপনার যা প্রয়োজন ঠিক তা নয় তবে এটি বেশ কাছে।

আমি পুনঃনির্দেশিত আউটপুট চেষ্টা করেছি, কিন্তু এটি আমার পক্ষে কার্যকর হয়নি। প্রক্রিয়াটি কোনও সকেটে লেখার কারণ হতে পারে, আমি জানি না।


ধন্যবাদ এটি কাজ করে, তবে আউটপুট কেটে গেছে, যেমন পিংয়ের জন্য: লিখুন (1, "1.0.0.1 থেকে" 64 বাইট: আইসিএমপি_সেক = "..., 56) = 56
izy

8

আমি কীভাবে কোনও অ্যাপ্লিকেশন আউটপুটে একটি কনসোল / টার্মিনাল-ভিউ যুক্ত করব 'যাতে এটি কী বলছে তা আমি দেখতে পারি?

এই প্রশ্নটি সম্পর্কে, আমি জানি যে প্রক্রিয়াটি চালু করার আগে আপনি দৃশ্যের কমান্ড চালু না করেও আউটপুটটি ধরা সম্ভব।

আমি কখনই চেষ্টা করার সময়, আমি একটি আকর্ষণীয় নিবন্ধ পেয়েছি যা জিডিবি ব্যবহার করে কীভাবে করবেন (এবং আপনার প্রক্রিয়া পুনরায় আরম্ভ না করে) তা ব্যাখ্যা করে।

পুনঃনির্দেশ-আউটপুট-থেকে-এ-চলমান প্রক্রিয়ার

মূলত:

  1. আপনার প্রসেসের জন্য ওপেন ফাইলগুলির তালিকাটি পরীক্ষা করে দেখুন / প্রোক / এক্সএক্সএক্স / এফডিকে ধন্যবাদ
  2. আপনার প্রক্রিয়াটি জিডিবির সাথে সংযুক্ত করুন
  3. এটি বিরতি দেওয়ার পরে, আপনার আগ্রহী ফাইলটি বন্ধ করুন (বন্ধ করুন) ফাংশনটি কল করুন (আপনি জিডিবিতে আপনার প্রক্রিয়াটির যে কোনও ফাংশন করতে পারেন I আমি সন্দেহ করি যে আপনার প্রসেসে আপনার ডিবাগ প্রতীক লাগবে ..)
  4. তৈরি () বা খুলুন () ফাংশনটি কল করে একটি নতুন ফাইল খুলুন। (শেষে মন্তব্যে একবার নজর দিন, আপনি একই হ্যান্ডেলটি ব্যবহার হবে তা নিশ্চিত করতে লোকেরা ডুপ 2 () ব্যবহার করার পরামর্শ দিবে )
  5. প্রক্রিয়াটি বিচ্ছিন্ন করুন এবং চালানো যাক।

যাইহোক, আপনি যদি i386 বাক্সে একটি লিনাক্স ওএস চালাচ্ছেন, মন্তব্যগুলি নতুন কনসোলে আউটপুট পুনঃনির্দেশ করার জন্য আরও ভাল সরঞ্জাম সম্পর্কে কথা বলছে: 'রেটি' । যদি তা হয় তবে এর ব্যবহার বিবেচনা করুন।


5

আমার জন্য, এটি কাজ করেছে:

  1. প্রক্রিয়াটির মালিক হিসাবে লগইন করুন (এমনকি rootঅনুমতি অস্বীকারও করা হয়)

    ~$ su - process_owner
    
  2. অন্যান্য অনেক উত্তরে উল্লিখিত ফাইল বর্ণনাকারী টেইল করুন।

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
    

2

আমি স্থানীয়ভাবে চলমান একটি ইয়াম আপগ্রেড প্রক্রিয়াটি দূরবর্তীভাবে দেখতে চেয়েছিলাম, তাই সম্ভবত এটি করার আরও কার্যকর উপায় ছিল, আমি এখানে যা করেছি তা এখানে:

watch cat /dev/vcsa1

স্পষ্টতই আপনি কোন টার্মিনালটি ব্যবহৃত হচ্ছে তার উপর নির্ভর করে vcsa2, vcsa3 ইত্যাদি ব্যবহার করতে চাইবেন d

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

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