বাশ: ব্যাকগ্রাউন্ডে একটি প্রক্রিয়া চালানো যাক, প্রয়োজন হলে পুনরায় আরম্ভ করুন, তবে প্যারেন্ট স্ক্রিপ্ট থেকে CTRL-C পান C


0

আমি 0.1 fps এ লাইভ স্ট্রিম থেকে চিত্রগুলি দখল করতে livestreamerএবং ব্যবহার ffmpegকরতে যাচ্ছি :

livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=1/10 out%04d.png" https://www.ustream.tv/channel/number worst

আমি এর আউটপুট ওভাররাইট করতে ffmpeg পেতে পারি না, তাই এটি out%04d.pngপ্যাটার্ন দিয়ে নতুন ফাইল তৈরি করা চালিয়ে যায় । এটি ঠিক আছে, আমি সর্বাধিক নতুন আউট ফাইলের ট্র্যাক রাখতে এবং পুরানো ফাইলগুলি মুছতে পারি। যাইহোক, livestreamerপ্রক্রিয়াটি কখনও কখনও বিভিন্ন কারণে প্রস্থান করে এবং আমি যতক্ষণ না এটি চালাতে চাই তা স্বয়ংক্রিয়ভাবে পুনরায় চালু করতে চাই।

সাবস্কেল ব্যবহারের একটি প্রচেষ্টা সিটিআরএল-সি-তে যেমন প্রত্যাশা করেছিল তেমন প্রতিক্রিয়া দেখায়নি কারণ সাব-শেলের উপর সিগন্যালটি পাস করা হয়নি:

#!/bin/bash

( while true; do
  livestreamer --player "ffmpeg -i" --player-args "{filename} -vf fps=0.1 out%04d.png" https://www.ustream.tv/channel/number worst
done ) &

while true; do
  newestImage=${code to find newest image}
  postProcess $newestImage
  deleteOldImages
  sleep 5
done

আমি যখন SIGINTউপরের স্ক্রিপ্টে প্রেরণ করি তখন আমি যে শেলটি প্যারেন্ট স্ক্রিপ্ট শুরু করেছিলাম তা বন্ধ করার পরেও সাবশেলটি জীবিত থাকে। আউটপুট ডিরেক্টরিটি নতুন ফাইলগুলির সাথে প্লাবিত হয় যখন কোডগুলি যেগুলি মুছতে পারে সেগুলি আর চালিত হচ্ছে না। একটিও trapসাহায্য করেনি:

trap "kill $SUBSHELL_PID" SIGINT

( ... ) & # subshell as above
SUBSHELL_PID=&!

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

সম্পাদনা করুন: সাবসেল প্রথম স্থানটিতে একটি খারাপ ধারণা হতে পারে? আমি কি কোনওভাবে livestreamerপটভূমিতে লঞ্চ করতে পারি এবং হয় আমি যখন চাই তখন এটি মেরে ফেলতে পারি, বা নিজে থেকে বের হয়ে গেলে পুনরায় চালু করতে পারি?


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

উত্তর:


1

লাইভস্ট্রিমার নিজেই হত্যা করুন।

trap "killall livestreamer" SIGINT

এটি কি livestreamerআমার পিতা-মাতার স্ক্রিপ্টের বাইরের কোনও দৃষ্টান্তকে হত্যা করে না ? আমি এখনও কিছুই করছি না, তবে ভবিষ্যতে আমি হতে পারি
ক্রিস্টোফ

আপনার সম্পূর্ণ সমাধানটি একটি দ্রুত নোংরা হ্যাক। ভবিষ্যতে সিআরটিএল-সি নিজে একবারে কয়েকবার চাপার পরিবর্তে একটি সঠিক ত্রুটি হ্যান্ডলিং লিখুন।
ইপোর স্যারসার

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