কোনও প্রক্রিয়া কোনও ফাইলে লেখার কাজ শেষ করে দিলে আমি কীভাবে বলতে পারি?


9

আমার একটি প্রক্রিয়া রয়েছে যা শেল থেকে তৈরি হয়েছিল। এটি একটি পটভূমি প্রক্রিয়া হিসাবে চলছে এবং একটি সিএসভি ফাইলে একটি ডিবি রফতানি করছে /tmp

পটভূমি প্রক্রিয়াটি শেষ হয়ে গেলে (শেষ / সমাপ্ত) বা সিএসভি ফাইল লকটি বন্ধ হয়ে গেলে আমি কীভাবে বলতে পারি? আমি একবার এটি লেখার পরে অন্য হোস্টের কাছে এফটিপি করার পরিকল্পনা করছি, তবে ফাইল স্থানান্তর শুরু করার আগে আমার সম্পূর্ণ ফাইলের প্রয়োজন।


প্রক্রিয়ায় আপনার একরকম অবহিত করুন ...
কক্ষপথে লঘিমা জাতি

উত্তর:


7

লিনাক্সে, কোনও প্রোগ্রাম যখন এটি লিখতে থাকে তখনও ফাইলটি লক হয় না (উইন্ডোগুলির বিপরীতে))

প্রক্রিয়াটি সম্পন্ন হয়েছে কিনা তা পরীক্ষা করতে, ব্যবহার করুন:

while [[ 1 ]]; do
  pgrep dbprocess &>/dev/null

  if [[ $? -eq 0 ]]; then
    echo still running
  else
    echo finished
    # start ftp transfer
  fi
  sleep 2
done

প্রক্রিয়াটিতে ফাইলটি খোলা আছে কি না তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন

  • lsof <file> এটি খোলার প্রক্রিয়াগুলির তালিকা প্রদর্শন করবে <file>

  • ls -l /proc/$(pgrep db-process)/fd প্রক্রিয়া দ্বারা খোলা ফাইল বিবরণকারী তালিকাভুক্ত db-process


7

এটি waitসম্পাদন করতে আপনি অন্তর্নির্মিত শেলটি ব্যবহার করতে পারেন ।

waitBuiltin কেবল শেল সম্পূর্ণ পটভূমি কাজ জন্য অপেক্ষা বিরাম ঘটায়। আপনি হয় এটির জন্য অপেক্ষা করতে একটি নির্দিষ্ট কাজটি পাস করতে পারেন, বা এটি সমস্ত কাজের জন্য অপেক্ষা করতে পারেন।

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

echo $(date): starting
sleep 5 &
echo $(date): do something else
wait
echo $(date): background job finished

যার ফলাফল:

Thu Sep 25 12:06:48 EDT 2014: starting
Thu Sep 25 12:06:48 EDT 2014: do something else
Thu Sep 25 12:06:53 EDT 2014: background job finished
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.