বাশ স্ক্রিপ্ট থেকে ম্যানুয়ালি একটি পিআইডি ফাইল লিখুন


9

আমি কীভাবে বাশ স্ক্রিপ্ট লিখতে পারি যা একটি দীর্ঘ চলমান প্রোগ্রাম চালায় এবং প্রোগ্রামগুলি প্রসেস আইডি একটি পৃথক ফাইলে সংরক্ষণ করে?

আমি এরকম কিছু চাই

#!/bin/bash
exec long_running_tool
echo `ps af |grep "long_running_tool" |awk '$5 == "long_running_tool" {print $1}'` > pid_file

তবে ঠিক এই কাজটি কার্যকর করার psপরে সরঞ্জামটি শেষ হয়ে গেলে ।

প্রক্রিয়াটির প্রক্রিয়া আইডি তৈরির উপায় আছে কি?


2
আপনার নমুনা কোড কাজ করবে না কারণ এক্সিকিউট কাঁটাচামচ করে না, তাই শেল প্রক্রিয়াটি প্রক্রিয়া দ্বারা প্রতিস্থাপিত হয় long_running_tool। ফলস্বরূপ, এক্সিকিউট কখনই ফিরে আসে না এবং নিম্নলিখিত লাইনটি কখনও পৌঁছায় না। দেখুন help exec, execve(2)
এটিয়েন ডেকহ্যাম্পস

@ e-t172 নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমি তখন 'এক্সিকিউট' মুছে ফেলি।
ডারমাইক

উত্তর:


12

আপনি "&" দিয়ে ব্যাকগ্রাউন্ডে প্রক্রিয়াটি সহজেই চালাতে পারেন, তারপরে "$!" ব্যবহার করে পটভূমি প্রক্রিয়াটির পিআইডি পান $

#!/bin/bash
long_running_tool &
echo $! > pid_file

তারপরে, allyচ্ছিকভাবে, অপেক্ষা করুন $! প্রক্রিয়াটি সম্পাদন শেষ না হওয়া পর্যন্ত যদি আপনি শেলটি ব্লক করতে চান।


1
আপডেট: আমি যখন fg ব্যবহার করি তখন আমি 'fg: 21: জব (নাল) কাজের নিয়ন্ত্রণে তৈরি হয় না' এবং স্ক্রিপ্টটি ব্লক করে না। দুঃখিত।
ডারমাইক

"অপেক্ষা করুন!" fg এর সাথে একইরকম প্রভাব থাকতে হবে যা আমি নিশ্চিত করতে পারি যে কোনও স্ক্রিপ্টে কাজ করে। আমার সম্ভবত পোস্ট করার আগে এটি পরীক্ষা করা উচিত ছিল। >।> আমার খারাপ।
জেরেমি স্টুর্ডিভ্যান্ট

8
#!/bin/bash
echo $$ > fooapp.pid
exec fooapp

পূর্বে উল্লিখিত হিসাবে, নির্দিষ্ট প্রোগ্রামের সাথে exec প্রতিস্থাপন করে পিআইডি ধরে রাখেbash

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