"ব্যবহারকারীর সংজ্ঞায়িত সংকেত 1" বার্তাটি সহ আমার বেশ কয়েকটি নিয়মিত প্রোগ্রাম ক্রাশ হয়েছে (নিয়মিতভাবে)। আমি জানি একটি nohupকমান্ড আছে, কিন্তু একটি nousr1আদেশ আছে? বা এমন কিছু যা nohupইউএসআর 1 এর সাথে ছাড়া কিছু করবে ?
"ব্যবহারকারীর সংজ্ঞায়িত সংকেত 1" বার্তাটি সহ আমার বেশ কয়েকটি নিয়মিত প্রোগ্রাম ক্রাশ হয়েছে (নিয়মিতভাবে)। আমি জানি একটি nohupকমান্ড আছে, কিন্তু একটি nousr1আদেশ আছে? বা এমন কিছু যা nohupইউএসআর 1 এর সাথে ছাড়া কিছু করবে ?
উত্তর:
একটি সরল হল hacky সমাধান ইউটিলিটি অনুরূপ আছে nohupকিন্তু জন্য SIGUSR1, এর একটি কপি পেতে হবে coreutils উৎস, এটি আনপ্যাক, না
sed -i 's/SIGHUP/SIGUSR1/' /path/to/coreutils/src/nohup.c
, allyচ্ছিকভাবে আউটপুট ফাইলের নামও পরিবর্তন করুন
sed -i 's/nohup\.out/nousr1.out/g' /path/to/coreutils/src/nohup.c
, এই উত্সটি সংকলন করুন এবং এতে নতুন-সংকলিত nohupবাইনারি ইনস্টল করুন /usr/bin/nousr1:
cp /path/to/coreutils/src/nohup /usr/bin/nousr1
এর পরে, আমি যাচাই করেছিলাম, sleep 1000প্রস্থান করে USR1, যখন nousr1 sleep 1000এই সংকেত থেকে অনাক্রম্য।
nohupহ'ল প্রক্রিয়াটি টার্মিনাল থেকে বিচ্ছিন্ন করা যাতে এটি SIGHUPপ্রথম স্থানে প্রেরণ করা হয় না । এটি একটি সিগন্যাল হ্যান্ডলারও সেট আপ করে এটি একটি অতিরিক্ত বোনাস, তবে এটি অপ্রয়োজনীয় হওয়া উচিত।
signal(SIGHUP,SIG_IGN);কলটি সরিয়ে ফেলেন nohup.c, প্রক্রিয়াটি গ্রহণ করবে SIGHUP। কি nohupসংকেত উপেক্ষা থেকে সরাইয়া আছে মাত্র stdin, stdout- এ, দ্বারা stderr অ টার্মিনাল ফাইল হিসেবে বর্ণনাকারী পুনরায় খোলার করা হয়। এটি সত্যিই কোনও বিশেষ উপায়ে টার্মিনাল থেকে প্রক্রিয়াটি বিচ্ছিন্ন করে না। যেমন, SIGHUPটার্মিনাল স্তব্ধ হয়ে গেলে প্রক্রিয়াটি প্রেরণ করা হবে। অন্যদিকে বাশ রয়েছে, যা disownকমান্ডের সাথে একই রকম কাজ করে , তবে এটি কীভাবে বাস্তবায়িত হবে তা আমি নিশ্চিত নই - সম্ভবত আপনি যেভাবে বোঝাতে চেয়েছেন সেভাবে।
শেল trapবিল্ট-ইন কমান্ড সম্পর্কে কীভাবে ?
trap 'echo "Thou shalt not USR1 me"' USR1
trapফাঁকা যুক্তি সহ আপনাকে কমান্ডের ফর্মটি ব্যবহার করতে হবে । এটা চেষ্টা কর:
trap '' SIGUSR1; myprogram
এটি SIGUSR1 সিগন্যালটিকে উপেক্ষা করবে যা আপনি যা করার চেষ্টা করছেন। যদিও আমি মন্তব্যকারীদের সাথে একমত যে চোখের সাক্ষাতের চেয়ে এখানে সম্ভবত আরও কিছু চলছে।
ভুল ফর্ম:
trap 'echo ...' SIGUSR1; myprogram
তবুও myprogramSIGUSR1 গ্রহণ করার অনুমতি দেবে তবে শেলটি কমান্ড echoথেকে চালানো হবে trap।
trap '' SIGUSR1; gvimdiff file1 file2এবং "ভিম: ক্যাড মারাত্মক সংকেত ইউএসআর 1" দিয়ে ভিম মারা গেল।