কমপক্ষে GNU ব্যাশ সংস্করণ 4.3.42 x86_64 && NNG বাশ সংস্করণ 4.3.11 x86_64 এ দেখা যায়
আমি একটি সিগন্যাল ( সিগুসআর 1 হিসাবে ) দ্বারা বাধাপ্রাপ্ত হওয়ার জন্য সাধারণেরsleep & wait $! পরিবর্তে ব্যবহার করি । তবে মনে হয় যে নিম্নলিখিতটি চালানোর সময় ব্যাশ-বিল্টিন একটি অদ্ভুত আচরণ করে।sleepsleepwait
বন্দর 1:
cat <(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)&
টার্মিনাল ২:
kill -10 /the pid of the subshell, printed by the previous command/
বন্দর 1:
^C (ctrl + C)
তারপরে, আমি একটি সাবসিএল পেয়ে যা 100 শতাংশে সিপিইউ পোড়ায়।
বন্দর 1:
pkill -P $(pgrep -P $$)
কেন এই আচরণ ঘটে তা সম্পর্কে আপনার কোনও ধারণা আছে?
এনবি : cat <(/subshell/)ব্যাকগ্রাউন্ডে না থাকলে কোনও সমস্যা হয় না।
এই আচরণটি অনুভব করার আরেকটি উপায়
বন্দর 1:
(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)&
টার্মিনাল ২:
kill -10 /the pid of the subshell, printed by the previous command/
বন্দর 1:
fg
^C (ctrl + C)
তারপরে, হিমায়িত শেলটি পান।
এই আচরণটি অভিজ্ঞতার তৃতীয় উপায়
বন্দর 1:
(
trap 'echo SIGUSR1' SIGUSR1;
echo $BASHPID;
while :;do
sleep 1 &
wait $!;
echo test;
done
)
টার্মিনাল ২:
kill -10 /the pid of the subshell, printed by the previous command/
বন্দর 1:
^C (ctrl + C)
তারপরে, হিমায়িত শেলটি পান।
bash4.4 -এ পরিবর্তিত হয়েছে , সম্ভবত এটি এখানে প্রভাবিত হতে পারে।
wait খুব সাদৃশ্যপূর্ণ এমন একটি স্পিনলুপ ইস্যুটি ঠিক করে । আমি চূড়ান্তভাবে উপ-প্রক্রিয়া তৈরি করে এমন একটি লুপে আমার দ্বারা আঘাতিত হয়েছিল। যাইহোক, আমি আপনার পরিস্থিতি 4.4.20 এ পরীক্ষা করেছি এবং এটি এখনও একটি সমস্যা ছিল। মজার ব্যাপার হচ্ছে, যখন আমি একটি সংস্করণ আমার নির্মিত একটি ডিবাগার সংযুক্ত, আমি দেখতে পারে এটি প্রায় লুপিং হয়েছিল, কিন্তু এটা এছাড়াও বাইরে ভঙ্গ প্রভাব ছিল, এবং লুপ আবার 'পরীক্ষা' outputting শুরু করবে। অন্য কথায়: ডিবাগার সংযুক্তি এটি স্পিনলুপিং বন্ধ করে দেয়।