নোহুপ আছে, সেখানে কি নউসর 1 কমান্ড আছে?


12

"ব্যবহারকারীর সংজ্ঞায়িত সংকেত 1" বার্তাটি সহ আমার বেশ কয়েকটি নিয়মিত প্রোগ্রাম ক্রাশ হয়েছে (নিয়মিতভাবে)। আমি জানি একটি nohupকমান্ড আছে, কিন্তু একটি nousr1আদেশ আছে? বা এমন কিছু যা nohupইউএসআর 1 এর সাথে ছাড়া কিছু করবে ?


3
আরও ভাল প্রশ্ন হতে পারে যে এটি প্রথম স্থানে usr1 সংকেত পাঠাচ্ছে? যদি কিছু না হয় তবে প্রস্থান বার্তাটি কেবল বিভ্রান্তিকর হতে পারে।
অনুদান দিন

2
আপনার "নিয়মিত প্রোগ্রামগুলিতে" আপনার কিছু গুরুতর সমস্যা হতে পারে বলে মনে হচ্ছে ... কেবলমাত্র সংকেত অক্ষম করার ফলে অন্তর্নিহিত অ্যাপ্লিকেশনগুলিকে সঠিকভাবে কাজ করতে সক্ষম বা সক্ষম করতে পারে না। আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি যে আপনি কেবল কিছু অক্ষম করার আগে আপনার পরিবেশটি যত্ন সহকারে পরীক্ষা করুন।
এমডিপিসি

@ গ্রান্ট: আমি সম্মত এমন কোনও ইউটিলিটি আছে যা আমাকে বলতে পারে যে এই সংকেতগুলি কী পাঠাচ্ছে?
ব্যবহারকারী 2624632

উত্তর:


3

একটি সরল হল 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কমান্ডের সাথে একই রকম কাজ করে , তবে এটি কীভাবে বাস্তবায়িত হবে তা আমি নিশ্চিত নই - সম্ভবত আপনি যেভাবে বোঝাতে চেয়েছেন সেভাবে।
রুসলান

এটি ভাল কাজ করে বলে মনে হচ্ছে।
ব্যবহারকারী 2624632

8

শেল trapবিল্ট-ইন কমান্ড সম্পর্কে কীভাবে ?

trap 'echo "Thou shalt not USR1 me"' USR1 

ভাল ধারণা, কিন্তু এটি কার্যকর হয়নি। প্রক্রিয়াটি "ব্যবহারকারীর সংজ্ঞায়িত সংকেত 1" এর মাধ্যমে প্রস্থান করা হয়েছে।
ব্যবহারকারী 2624632

সিগন্যাল হ্যান্ডলারগুলি (SIG_IGN এবং SIG_DFL ব্যতীত) শিশু প্রক্রিয়াগুলির দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয় না
আইকোলি

2

trapফাঁকা যুক্তি সহ আপনাকে কমান্ডের ফর্মটি ব্যবহার করতে হবে । এটা চেষ্টা কর:

trap '' SIGUSR1; myprogram

এটি SIGUSR1 সিগন্যালটিকে উপেক্ষা করবে যা আপনি যা করার চেষ্টা করছেন। যদিও আমি মন্তব্যকারীদের সাথে একমত যে চোখের সাক্ষাতের চেয়ে এখানে সম্ভবত আরও কিছু চলছে।

ভুল ফর্ম:

trap 'echo ...' SIGUSR1; myprogram

তবুও myprogramSIGUSR1 গ্রহণ করার অনুমতি দেবে তবে শেলটি কমান্ড echoথেকে চালানো হবে trap


এটি ভাল কাজ করে বলে মনে হচ্ছে।
ব্যবহারকারী 2624632

উফফ, আমি খুব শীঘ্রই কথা বলেছি। আমি দৌড়াচ্ছিলাম trap '' SIGUSR1; gvimdiff file1 file2এবং "ভিম: ক্যাড মারাত্মক সংকেত ইউএসআর 1" দিয়ে ভিম মারা গেল।
ব্যবহারকারী 2624632

হুঁ, কোড. google.com/p/vim/source/browse/src/os_unix.c এ উত্স-কোডটি দেখে মনে হচ্ছে ভিআইএম ইউএসআর 1 সিগন্যালটিকে পুনরায় সক্ষম করে এবং এটিকে মারাত্মক ত্রুটি হিসাবে বিবেচনা করে। আপনার একমাত্র আশা মনে হয় আপনি যদি ওএসকে USR1 সংকেত সরবরাহ করতে অস্বীকার করতে পারেন। আমি জানি না যে এখানে এমন কিছু আছে যা সেই কার্যকারিতাটি সরবরাহ করতে পারে।
অ্যাড্রিয়ান প্রানক


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