লকিং প্রসেসগুলি কীভাবে তালিকাভুক্ত করবেন?


51

ব্যবহার করে flock, বেশ কয়েকটি প্রক্রিয়া একই সাথে একটি ভাগ করা লক থাকতে পারে, বা একটি লেখার লক অর্জনের জন্য অপেক্ষা করতে পারে। আমি কীভাবে এই প্রক্রিয়াগুলির একটি তালিকা পেতে পারি?

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

উত্তর:


42

lslocksথেকে util-লিনাক্স প্যাকেজ , ঠিক এই আছে।

ইন MODEকলাম, একটি লক জন্য অপেক্ষা প্রক্রিয়া একটি সঙ্গে চিহ্নিত করা হবে *


3
এ্যাপ্ট-ক্যাশে বলেছে যে ইউজু-লিনাক্স ইতোমধ্যে নতুন সংস্করণ (২.২০.১-২ubuntu3), তবে আমার কাছে এলএসলক নেই; আমি কি এমন কোনও রেপো ব্যবহার করতে পারি যা আমাকে তা দেবে?
বেনুবার্ড

2
দেখে মনে হচ্ছে এটি ২.২২-এ যুক্ত হয়েছিল, সুতরাং উবুন্টুর সংস্করণটি খুব পুরানো। সম্ভবত একটি নতুন সংস্করণ শেষ পর্যন্ত পাওয়া যাবে। (আরএইচএল 6 বা সেন্টোসের ক্ষেত্রেও এটি lsof
mattdm

6
lslocksপড়া /proc/locks, একটি চিম্টি মধ্যে আপনি সরাসরি যে পড়তে পারেন নিজেকে সতর্কীকরণ যে ফাইল ডিভাইস এবং inode বদলে নামে চিহ্নিত করা হয় না। আপনি যেহেতু ফাইলটি জানেন তাই সমস্যা হওয়া উচিত নয়। ->লক টাইপ কলামের আগে ব্লক করা এন্ট্রিগুলির একটি উপসর্গ থাকে (এইভাবে সেই লাইনে একটি কলাম যুক্ত করা হয়)।
মিঃ স্পুর্যাটিক

27

দুটি সম্ভাবনা: lsof(আমার পছন্দ) বা lslk(বিশেষত ফাইল লকের জন্য):

[root@policyServer ~]# lslk | grep "master.lock"
SRC          PID   DEV  INUM   SZ TY M   ST WH  END LEN NAME
master      1650 253,0 12423   33  w 0    0  0    0   0 /var/lib/postfix/master.lock

[root@policyServer ~]# lsof | grep "master.lock"
master     1650      root   10uW     REG              253,0       33      12423 /var/lib/postfix/master.lock

Lslk এর আউটপুট স্ব-বিস্তৃত তবে lsofলক বিবরণটি "এফডি" কলামে রাখে (যা 10uWউপরে রয়েছে)। ম্যান পৃষ্ঠা থেকে:

The mode character is followed by one of these lock characters, describing the type of lock applied to the file:

N for a Solaris NFS lock of unknown type;
r for read lock on part of the file;
R for a read lock on the entire file;
w for a write lock on part of the file;
W for a write lock on the entire file;
u for a read and write lock of any length;
U for a lock of unknown type;
x for an SCO OpenServer Xenix lock on part      of the file;
X for an SCO OpenServer Xenix lock on the      entire file;
                       space if there is no lock.

সুতরাং lsofউপরের "এফডি" কলামটি এখানে ভেঙে যায়:

10এই খোলা ফাইলটির আক্ষরিক বিবরণকারী। এর সাথে কী যুক্ত?/proc/1650/fd/10

u ফাইল পড়তে এবং লেখার জন্য উন্মুক্ত

W প্রোগ্রাম ফাইলটিতে একটি রাইটিং লক আছে।


1
Lslk কোথায় পাবেন তা আমি খুঁজে পাচ্ছি না এবং এটি আর বজায় রাখা হবে না বলে মনে হয়। এটি উল্লেখ করার মতো, হ'ল আপনি যদি কেবলমাত্র সেই প্রক্রিয়াগুলি দেখান যা প্রকৃতপক্ষে ফাইলটি লক করে থাকে তবে আপনাকে "ute মিটেক্স" এর জন্য গ্রেপ করতে হবে। এটি 'হোল্ডিং' এবং 'ব্লকিং' এর মধ্যেও পার্থক্য করে না।
বেনুবার্ড

এফডি ক্ষেত্রের প্রথম অক্ষরের অক্ষরটি ফাইলটি দিয়ে ফাইলটি খোলা হয় (আমি ধরে নিচ্ছি যে আপনি এটি ধারণ করে বোঝাচ্ছেন) alচ্ছিক দ্বিতীয় বর্ণের অক্ষরটি হ'ল লক (যদি থাকে) ফাইলটিতে রয়েছে (যা আমি ' মি ধরেছি "ব্লকিং" বলতে আপনার অর্থ যা বোঝানো হয়েছে) এছাড়াও flock! = মিটেক্স। আপনার
গ্রেপ

ডি আহা! আপনি ঠিক বলেছেন - "মুটেক্স" আমার স্ক্রিপ্টের নাম, সুতরাং 'মুটেক্স' এর জন্য গ্রেপিং কেবল আমার ক্ষেত্রে প্রযোজ্য। এটি উল্লেখ করার জন্য ধন্যবাদ
বেনুবার্ড

দেখে মনে হচ্ছে যে আমিও বু-বু বানিয়েছি: "প্রথম অক্ষরের চরিত্রটি হল মোড এটির মাধ্যমে ফাইলটি খোলার ..."
ব্র্যাচলে


0

ক্ষেত্রে lsofনিজেই সিস্টেমে অনুপস্থিত, ls /proc/*/fd/* | grep LOCK_FILE_NAMEএকই তথ্য প্রদান করা উচিত।

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