কীভাবে প্রক্রিয়াটি STDOUT এ লিখছে তা আবিষ্কার করবেন?


19

আমার একটি প্রক্রিয়া চলার দুটি উদাহরণ রয়েছে। এর মধ্যে একটি হ'ল "ফ্রয়েআকইং আউট!" এবং মুদ্রণ ত্রুটিগুলি STDOUT এ থামেনি।

আমি ভাঙা প্রক্রিয়াটি মেরে ফেলতে চাই তবে আমাকে নিশ্চিত করতে হবে যে আমি ভুলটি শেষ করে দিচ্ছি না। তারা উভয় একই সময়ে শুরু হয়েছিল এবং ব্যবহার করে topআমি দেখতে পাচ্ছি যে তারা উভয়ই একই পরিমাণ মেমরি এবং সিপিইউ ব্যবহার করে। আমি এমন কোনও কিছু খুঁজে পাচ্ছি না যা নির্দেশ দেয় যে কোন প্রক্রিয়াটি খারাপ আচরণ করছে।

সবচেয়ে নিরাপদ বিষয়টি হ'ল কোন প্রক্রিয়া / পিডটি STDOUT এ লিখছে figure

এটি করার কোনও উপায় আছে?


1
স্টাডাউটে লেখার অর্থ তার ফাইল ডেস্ক্রিপ্টর 1 ((প্রক্রিয়াধীন প্রক্রিয়াটির) - যা টার্মিনালের মতো কিছু হতে পারে বা লিখতে হবে /dev/null। আপনি কি নিশ্চিত যে এর পরিবর্তে কোনও নির্দিষ্ট ফাইল বোঝাতে চাইছেন না (যেমন টার্মিনাল ডিভাইস, বা লগ ফাইল ...)?
স্টাফেন চেজেলাস

যদি তারা উভয়ই একই শেলের মধ্যে শুরু করা হয় তবে তারা দুজনেই STDOUT এ লিখছে, সুতরাং এটি পিন করা আপনাকে 2 টির মধ্যে কোনটি মারতে হবে তা সনাক্ত করতে সহায়তা করবে না। জোফেলের পদ্ধতি সম্ভবত আপনি যা খুঁজছেন তা।
slm

তার সত্যিকার অর্থে যা বোঝায় তা হ'ল টার্মিনালে আউটপুট উত্পাদন করা
বার্মার

উত্তর:


17

লিনাক্স-এ, ধরে নেওয়া যে আপনি যেমন শেলের স্টাডাউট সংযুক্ত আছেন ঠিক একই উত্সটিতে কী লিখছে তা আপনি জানতে চান, আপনি এটি করতে পারেন:

strace -fe write $(lsof -t "/proc/$$/fd/1" | sed 's/^/-p/')

এটি write()আপনার শেলের এফডি 1 হিসাবে একই ফাইলটিতে কমপক্ষে একটি ফাইল বর্ণনাকারী খোলা আছে এমন প্রতিটি প্রক্রিয়াটির সিস্টেম কলগুলির (যে কোনও ফাইল বর্ণনাকারীর উপরে) প্রতিবেদন করবে ।


এটি আমার প্রথম দিকে মনে ছিল, আমি উভয় পদ্ধতি আপনাকে উভয়ের ধন্যবাদ দিয়ে চেষ্টা করব।
TCZ8

23

আপনি উভয় প্রসেসিং সাইনস্টপ প্রেরণ করে থামিয়ে দিতে পারেন (পিআইডি 1 এবং পিড 2 প্রতিস্থাপন করুন আসল পিআইডি বা ব্যবহারের killallনাম এবং অ্যাপ্লিকেশন নাম দ্বারা):

kill -SIGSTOP pid1 pid2

টার্মিনালে মুদ্রণ (বা যেখানেই স্টডআউট পুনঃনির্দেশিত হয়) থামানো উচিত। তারপরে তাদের ব্যবহার করে একটি চালিয়ে যান

kill -SIGCONT pid1

ত্রুটি বার্তাগুলি অবিলম্বে উপস্থিত হলে, আপনি এটির প্রথম প্রক্রিয়াটি জানেন। যদি না হয় তবে আপনি এটি আবার থামাতে এবং দ্বিতীয়টি চালিয়ে যেতে পারেন ...

থামানো প্রক্রিয়াটি হত্যার আগে প্রথমে সিগনকন্ট পাঠানো ভাল অনুশীলন।

একই কৌশল ব্যবহার করা যেতে পারে Ctrl-Zএবং শেল কাজ নিয়ন্ত্রণ ( fg %1, bg %1, kill %1, ...)।


1
এটির সমস্যা সমাধানের খুব ভাল উপায় তবে আমি টার্মিনালে কে লিখছি তা সন্ধান করার জন্য সত্যিই একটি উপায় খুঁজছিলাম। আপনাকে ধন্যবাদ
TCZ8

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