পিএস কমান্ড এবং গ্রেপ


8

প্রক্রিয়া তালিকায় কমান্ডটি ps -ef | grep $$দেখায় কেন grep? নয় grepপর মৃত্যুদন্ড কার্যকর psতার কাজ শেষ করেছে?


একে পাইপলাইন বলা হয় ...
ইপুর সিরার

যদি প্রথম কমান্ডটি শেষ না হওয়া পর্যন্ত এটি অপেক্ষা করে, তবে পাইপলাইনগুলি কীভাবে কমান্ডগুলি দিয়ে কাজ করবে যা তাদের নিজের মতো থামছে না tail -f filename | grep pattern?
বার্মার

উত্তর:


11

কমান্ডগুলি পাইপিং করার সময়, সমস্ত প্রক্রিয়া একই সময়ে শুরু হয় এবং I / O প্রবেশ / প্রস্থান না করা অবধি তারা কেবল ঘুমায় (অবরুদ্ধ)। শেল আউটপুটটি বাফার করে না এবং এক প্রক্রিয়া শেষ না হওয়া পর্যন্ত এটিকে ধরে রাখে না এবং তারপরে এটিকে অন্য প্রক্রিয়াতে স্থানান্তর করে না।

উদাহরণ স্বরূপ:

mtak@rubiks:~$ tar -zcvf test.tgz /lib/ | grep bla | grep foo | grep bar

ফলাফল স্বরূপ:

mtak 28813 28799  0 12:35 pts/17   00:00:00 tar -zcvf test.tgz /lib/
mtak 28814 28799  0 12:35 pts/17   00:00:00 grep --color=auto bla
mtak 28815 28799  0 12:35 pts/17   00:00:00 grep --color=auto foo
mtak 28816 28799  0 12:35 pts/17   00:00:00 grep --color=auto bar

আপনি / প্রো গাছটিতে গ্রেপ প্রক্রিয়াটির অবস্থা দেখতে পাবেন:

mtak@rubiks:~$ grep State /proc/28814/status
State:  S (sleeping)

আপনি আরও দেখতে পারেন যে উভয় গ্রেপ একই পাইপলাইন (আইডি 57573438) এর 1সাথে সংযুক্ত এবং প্রথম প্রক্রিয়ার STDOUT ( 0) দ্বিতীয় প্রক্রিয়ার STDIN ( ) এর সাথে সংযুক্ত রয়েছে ।

root@rubiks:~# ls -l /proc/28815/fd
total 0
lr-x------ 1 mtak mtak 64 dec  1 12:35 0 -> pipe:[57573437]
l-wx------ 1 mtak mtak 64 dec  1 12:35 1 -> pipe:[57573438]
lrwx------ 1 mtak mtak 64 dec  1 12:35 2 -> /dev/pts/17

root@rubiks:~# ls -l /proc/28816/fd
total 0
lr-x------ 1 mtak mtak 64 dec  1 12:35 0 -> pipe:[57573438]
lrwx------ 1 mtak mtak 64 dec  1 12:35 1 -> /dev/pts/17
lrwx------ 1 mtak mtak 64 dec  1 12:35 2 -> /dev/pts/17

এটি একটি জটিল উদাহরণ হিসাবে যদিও এটি বলা যায় যে তারা ঘুমায় এবং তারপরে একটি স্লিপ কমান্ড 'বসিয়ে দেবে, যখন এটি ঘুম বলে তখন শেলের দ্বারা কিছু করার চেয়ে আপনার ঘুমের আদেশ হয়
বার্লপ

আমি কিছুটা দেরি করার জন্য সেখানে স্লিপ কমান্ডটি রেখেছিলাম যাতে আমি সিস্টেমে চারপাশে দেখতে পারি। স্লিপ কমান্ড গ্রিপটির কোনও পিছনে গ্রাহককে প্রভাবিত করে না, এর পিছনে গ্রেপকে প্রভাবিত করে না। যদি এটি আপনাকে খুশি করে তোলে তবে আপনি একই জিনিসটি টার দিয়ে করতে পারেন: $ tar -zcvf test.tgz /lib/ | grep foo | grep barএবং তারপরে $ cat status Name: grep State: S (sleeping)
গ্রেপটি

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