একটি "পাইপ" কী এবং কীভাবে এটি "ভাঙ্গা" হতে পারে?


12

এখানে চিত্র বর্ণনা লিখুন

আমি এক্সকোড থেকে "ভাঙা পাইপ" ত্রুটিটি একবারে অনেক বেশি পেয়েছি। পাইপ আসলে কী তা জানতে এখন আমি আগ্রহী।

"পাইপ" ধারণাটি কী এবং কীভাবে এটি "ভাঙ্গা" হতে পারে?


3
একটি পাইপ একটি দীর্ঘ নল যা প্রচুর ডেটা ধারণ করে। পাইপের প্রাপ্তি শেষ হলে ডেটা টানা বন্ধ হয়ে যায় এটি ব্যাক আপ শুরু করে এবং পাইপটি ফেটে যায়। কম্পিউটারটি শেষের দিকে যে পাইপটিতে ডেটা স্টাফ করছে তা অবহিত করে যে এটি ঘটেছে।
সর্বসম্মত

উত্তর:


7

একটি পাইপ হ'ল একটি ইন্টারপ্রেসেস যোগাযোগ (আইপিসি) প্রক্রিয়া যা কোনও প্রক্রিয়াটির স্ট্যান্ডার্ড আউটপুটটিকে অন্যটির স্ট্যান্ডার্ড ইনপুটটির সাথে সংযুক্ত করতে ব্যবহৃত হয়।

"প্যাক্স" শব্দের জন্য আপনি যখন কোনও ফাইল অনুসন্ধান করতে চান তার একটি উদাহরণ:

cat filename | grep pax

এবং হ্যাঁ, আমি জানি আপনি grepসরাসরি ফাইলটি করতে পারেন তবে এটি কীভাবে এটি কাজ করে তা ব্যাখ্যা করে না, এটি কী করে?

এটি catকমান্ডের স্ট্যান্ডার্ড আউটপুটকে কমান্ডের স্ট্যান্ডার্ড ইনপুটকে সংযুক্ত করে grepcatফাইলের সামগ্রীগুলি তার স্ট্যান্ডার্ড আউটপুটে প্রেরণ করে এবং grepএর স্ট্যান্ডার্ড ইনপুট থেকে তার ফাইলটি (এই ক্ষেত্রে) পড়ে। এই জাতীয় প্রক্রিয়াগুলিকে একসাথে সংযুক্ত করে, আপনি নিজেরাই তৈরি করতে পারেন যে কোনও সংখ্যক পাইপ সেগমেন্ট সমন্বিত tools ভালো জিনিস:

show_users | grep pax | awk -F: '{print $4}' | tr '[a-z]' '[A-Z]' | cut -c1-20

একটি ভাঙ্গা পাইপ হ'ল যেখানে (সাধারণত) তথ্য প্রাপক সংযোগটি বন্ধ করে দিয়ে থাকে যখন প্রেরক এখনও স্টাফ প্রেরণের চেষ্টা করে।

উদাহরণস্বরূপ, যদি আপনি পেজার প্রোগ্রামের মাধ্যমে একটি বড় ফাইল প্রেরণ করেন (এটি একবারে একটি পৃষ্ঠা দেখতে):

cat myfile | pager

এবং তারপরে একটি করুন CTRL-BREAK, এর ফলে pagerপ্রক্রিয়াটি এর ইনপুট পাইপটি catব্যবহার শেষ করার আগে বন্ধ করে দিতে পারে। এই ভাঙ্গা পাইপ পাওয়ার জন্য এটি একটি সম্ভাবনা।


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

বিষয়টি সম্ভবত অ্যাপলকে জানাতে যথেষ্ট গুরুতর। এটির বিষয়ে যত বেশি বিকাশকারীরা অভিযোগ করবেন তত সম্ভবত এটি সমাধানের জন্য কিছু করা হবে।


সুতরাং একটি "ভাঙ্গা" পাইপ কি?
মোশে

pr -e4 -n ten-thousand-lines.c | sed 10qএকটি ভাঙা পাইপ দিয়ে শেষ হয়। কিনা prবিরক্তির তোমাকে বলতে বুঝেছি যে SIGPIPE সংকেত অন্য ব্যাপার নয়; এটি সহজেই সিগন্যালের ফলাফল হিসাবে প্রস্থান করতে পারে (একটি শূন্য-বহির্গমন স্থিতি তৈরি করে)।
জোনাথন লেফলার

পাইপগুলি প্রয়োজনীয়ভাবে "স্ট্যান্ডার্ড" ইনপুট এবং আউটপুটকে সংযুক্ত করে না । পাইপ দিয়ে যে কোনও আই / ও পাস করা প্রোগ্রামিয়ালি সম্ভব, যদিও কমান্ড লাইন থেকে আপনি সঠিক।
কার্লএফ

2

|চরিত্র প্রায়ই একটি নল বলা হয়। বিভিন্ন ইউনিক্স শেল (যা আমি জানি) এটিতে একটি কমান্ডের আউটপুটটিকে অন্যের ইনপুটটিতে পাইপ করতে ব্যবহার করা যেতে পারে।

cat myfile.txt | head

headকমান্ড শুধুমাত্র তার ইনপুট প্রথম কয়েকটি পংক্তি দেখায়। এই মুহুর্তে, এটি তার ইনপুটটি বন্ধ করে দেয়। এটি কমান্ডটির জন্য একটি সমস্যা তৈরি করে যা ইনপুট তৈরি করে। এটা কোথায় লিখতে হবে? যখনই আমাদের এই পরিস্থিতি হয়, বা যখন পাঠকের মধ্য দিয়ে লেখার প্রক্রিয়াটি শেষ হয় তখনই এটিকে "ভাঙা পাইপ" বলা হয়।

catকমান্ডটি চিরকাল স্থায়ী হওয়া থেকে রোধ করতে , ইউনিক্স মান একটি বিশেষ সংকেত ( সাইনপাইপ , সংকেত 13 ) সংজ্ঞা দেয় যা এটি প্রেরণ করে cat। এই সংকেতটির জন্য ডিফল্ট ক্রিয়াটি প্রক্রিয়াটি হ'ল, যা catশেষটিকে সুন্দর করে তোলে ।

দেখে মনে হচ্ছে আপনি যে অ্যাপ্লিকেশনটি ব্যবহার করছেন সেটিতে সিগপাইপ সহ সমস্ত সিগন্যালের জন্য একটি সিগন্যাল হ্যান্ডলার ইনস্টল করা আছে, যা আপনি দেখতে পাচ্ছেন এমন সামান্য পপআপ বার্তা তৈরি করে।


1

এই ত্রুটিটি প্রায়শই প্রায়শই উঠে আসে বলে মনে হয়। /programming/490366/ad-hoc-dep مامور-issue-putpkt-writ-failed-broken-pype "" এটি আপনার ফোনের সাথে কথা বলার জন্য এক্সকোডের অভ্যন্তরীণ ত্রুটি। মানে আপনি কোনও ভুল করেছেন, এটি ডেভলপমেন্ট সিস্টেমে একটি বাগ "


1

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

ইউনিক্স কমান্ড লাইন বিশ্বে পাইপ হুকিং প্রোগ্রামগুলির একসাথে একটি কাজ করার জন্য খুব সাধারণ উপায়। উদাহরণস্বরূপ sed 's/foo/bar/g' fred.txt | grep -e 'bar.*baz', ফাইলটিতে fred.txtস্ট্রিংয়ের সমস্ত উদাহরণ স্ট্রিংয়ের fooসাথে প্রতিস্থাপন করবে এবং barতারপরে লাইনগুলির জন্য ফলাফলটি অনুসন্ধান করবে যার barপরে কিছু সংখ্যক অক্ষর থাকবে baz

এটি অবশ্যই মারাত্মক উপকারী বলে মনে হচ্ছে না। তবে আমি নিশ্চিত যে আপনি যদি এটির বিষয়ে চিন্তা করেন তবে আপনি দেখতে পাচ্ছেন যে আপনি কীভাবে এটি সমস্ত ধরণের আকর্ষণীয় ব্যবহারগুলিতে রাখতে সক্ষম হতে পারেন, বিশেষত একবার আপনার মত প্রোগ্রাম awkবা perlআপনার নিষ্পত্তি করার পরে।

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

ডিফল্ট হ্যান্ডলিং SIGPIPEহ'ল প্রক্রিয়াটি এটি গ্রহণ করে। এবং যদি এটি পাইপলাইনের 'হেড' না হয় তবে পুরো SIGPIPEজিনিসটি চেইনের ব্যাক আপটি প্রচার করে।

এক্সকোড যা অভিযোগ করছেন তা হ'ল এটি কোনও পাইপ দিয়ে কিছু করার জন্য কিছু উপ-প্রোগ্রাম শুরু করেছিল এবং সেই উপ-প্রোগ্রামটি পাইপটি ভাঙা অবস্থায় অপ্রত্যাশিতভাবে মারা গিয়েছিল ..


0

একটি "ভাঙা" পাইপটি এমন এক যেখানে একটি close()প্রান্তটি 'd' হয়েছে এবং অন্যটি পড়ে বা লিখিত হয়েছে। উদাহরণস্বরূপ, নিম্নলিখিত শেল কমান্ডে:

cat foo | less

catপ্রক্রিয়া নল লেখার শেষ ঝুলিতে, এবং lessপ্রক্রিয়া এক পড়া চালিয়ে যান। যদি পাঠক প্রক্রিয়াটি পাইপটি বন্ধ করে দেয় তবে পাইপটি ভাঙ্গা হয় (এবং তাই অকেজো); লেখক প্রক্রিয়া অপারেটিং সিস্টেম থেকে "ভাঙা পাইপ" ত্রুটি পাবেন।


1
আসলে পাঠক এটি বন্ধ করলে এটি কেবল "ভাঙা"। যদি লেখক এটি বন্ধ করে দেয় ( catস্পষ্টভাবে এটি শেষ হওয়ার সাথে সাথেই হবে), পাঠক কেবল ফাইলের একটি শেষের শেষ দেখতে পাবে।
র্যান্ডম 832

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