প্রক্রিয়া বন্ধ হয়ে গেলে ডিফল্ট প্রস্থান কোড?


54

যখন কোনও প্রক্রিয়া হ্যান্ডেল-সক্ষম সিগন্যালের মতো মারা যায় SIGINTবা SIGTERMএটি সংকেতটি পরিচালনা করে না, তখন প্রক্রিয়াটির প্রস্থান কোডটি কী হবে?

আনহ্যান্ডল-সক্ষম সংকেতগুলির মতো SIGKILLকী?

আমি যা বলতে পারি তা SIGINTথেকে প্রস্থান কোডের সম্ভাব্য ফলাফল সহ একটি প্রক্রিয়া হত্যা করা 130, তবে এটি কার্নেল বা শেল প্রয়োগের দ্বারা পৃথক হবে কি?

$ cat myScript
#!/bin/bash
sleep 5
$ ./myScript
<ctrl-c here>
$ echo $?
130

আমি নিশ্চিত নই যে আমি অন্যান্য সংকেতগুলি কীভাবে পরীক্ষা করব ...

$ ./myScript &
$ killall myScript
$ echo $?
0  # duh, that's the exit code of killall
$ killall -9 myScript
$ echo $?
0  # same problem

1
আপনার killall myScriptকাজ, অত: পর ফিরতি জন্য killall এর (এবং স্ক্রিপ্ট নয়!) হয় 0. আপনি একটি জায়গা পারে kill -x $$[সংকেত সংখ্যা হচ্ছে এক্স, এবং $$ সাধারণত স্ক্রিপ্টের PID, শেল দ্বারা প্রসারিত (SH কাজ করে ব্যাশ, ...)] স্ক্রিপ্টের ভিতরে এবং তারপরে এটির প্রস্থান কোরটি পরীক্ষা করে।
অলিভিয়ার ডুলাক


আধা প্রশ্ন সম্পর্কে মন্তব্য: ব্যাকগ্রাউন্ডে মাইস্ক্রিপ্ট রাখবেন না। (বাদ দেওয়া &) অন্য শেল প্রক্রিয়া (অন্য টার্মিনালে) থেকে সিগন্যাল প্রেরণ করুন, তারপরে আপনি $?মাইস্ক্রিপ্ট শেষ হওয়ার পরে ব্যবহার করতে পারবেন ।
ম্যাটবিয়ানকো

উত্তর:


61

প্রক্রিয়াগুলি তাদের পিতামাতাকে একটি প্রস্থান কোডের প্রতিবেদন করার জন্য একটি পূর্ণসংখ্যার যুক্তি সহ _exit()সিস্টেম কল (লিনাক্সেও দেখুন exit_group()) করতে পারে। এটি একটি পূর্ণসংখ্যা হলেও পিতামাতাদের কাছে কেবলমাত্র 8 টি কম গুরুত্বপূর্ণ বিট পাওয়া যায় ( লিনাক্সে না হলেও, কোডটি পুনরুদ্ধার করতে পিতামাতার মধ্যে SIGCHLD ব্যবহার করার সময় waitid()বা হ্যান্ডলারটি ব্যতীত হয় )।

পিতামাতারা সাধারণত একটি পূর্ণসংখ্যা হিসাবে তাদের সন্তানের মর্যাদা পাওয়ার জন্য একটি করবেন wait()বা যদিও কিছুটা ভিন্ন শব্দার্থবিজ্ঞানের পাশাপাশি এটি ব্যবহার করা যেতে পারে)।waitpid()waitid()

লিনাক্স এবং বেশিরভাগ ইউনিসে, যদি প্রক্রিয়াটি সাধারণত শেষ হয়ে যায় তবে status স্থিতির নম্বরের 8 থেকে 15 বিটগুলিতে প্রস্থান হিসাবে প্রস্থান কোড থাকবে exit()। যদি তা না হয় তবে 7 টি কমপক্ষে 7 টি গুরুত্বপূর্ণ বিট (0 থেকে 6) সিগন্যাল নম্বর ধারণ করবে এবং কোনও কোর ফেলে দেওয়া হলে বিট 7 সেট করা হবে।

perl$?উদাহরণস্বরূপ এর সেট অনুসারে সেই সংখ্যাটি রয়েছে waitpid():

$ perl -e 'system q(kill $$); printf "%04x\n", $?'
000f # killed by signal 15
$ perl -e 'system q(kill -ILL $$); printf "%04x\n", $?'
0084 # killed by signal 4 and core dumped
$ perl -e 'system q(exit $((0xabc))); printf "%04x\n", $?'
bc00 # terminated normally, 0xbc the lowest 8 bits of the status

বোর্নের মতো শেলগুলি তাদের চলকটিতে সর্বশেষ রান কমান্ডের প্রস্থান স্থিতি তৈরি করে $?। তবে এটিতে সরাসরি ফিরে আসা সংখ্যাটি থাকে না, তবে এটির মধ্যে waitpid()একটি রূপান্তর এবং এটি শাঁসের মধ্যে পৃথক।

সমস্ত শেলের মধ্যে যা সাধারণ তা হল প্রক্রিয়াটি স্বাভাবিকভাবে শেষ $?হয়ে গেলে প্রস্থান কোডের সর্বনিম্ন 8 বিট থাকে (সংখ্যাটি পাস হয়েছে exit())।

প্রক্রিয়াটি যখন কোনও সিগন্যাল দ্বারা সমাপ্ত হয় তখন এটির ভিন্নতা কোথায়। সব ক্ষেত্রে, এবং এটি পসিক্স দ্বারা প্রয়োজনীয়, সংখ্যাটি 128 এর চেয়ে বেশি হবে P পসিক্স মানটি কী হতে পারে তা নির্দিষ্ট করে না। বাস্তবে যদিও, আমি জানি সকল বোর্নের মতো শেলগুলিতে, সর্বনিম্ন 7 বিটগুলিতে $?সংকেত নম্বর থাকবে। কিন্তু, nসিগন্যাল নম্বরটি কোথায় ,

  • ছাই, zsh, pdksh, বাশ, বোর্ন শেল, $?হয় 128 + n। কি যে মানে হল ঐ শাঁস মধ্যে, যদি আপনি একটি পেতে যে $?এর 129, আপনি কারণ প্রক্রিয়ার সঙ্গে থেকে প্রস্থান তা জানি না exit(129)বা তা সংকেত দ্বারা হত্যা করা হয় 1( HUPসবচেয়ে সিস্টেমে)। তবে যুক্তিটি হ'ল শেলগুলি যখন তারা নিজেরাই বাইরে বের হয় তখন ডিফল্টরূপে শেষ প্রস্থান হওয়া কমান্ডের প্রস্থান স্থিতি ফিরে আসে। $?এটি নিশ্চিত করে 255 এর চেয়ে বেশি কখনই বড় হয় না, যা ধারাবাহিকভাবে প্রস্থান স্থিতি করতে দেয়:

    $ bash -c 'sh -c "kill \$\$"; printf "%x\n" "$?"'
    bash: line 1: 16720 Terminated              sh -c "kill \$\$"
    8f # 128 + 15
    $ bash -c 'sh -c "kill \$\$"; exit'; printf '%x\n' "$?"
    bash: line 1: 16726 Terminated              sh -c "kill \$\$"
    8f # here that 0x8f is from a exit(143) done by bash. Though it's
       # not from a killed process, that does tell us that probably
       # something was killed by a SIGTERM
    
  • ksh93, $?হয় 256 + n। এর অর্থ হল যে আপনার একটি মূল্য থেকে একটি $?নিহত এবং অ-নিহত প্রক্রিয়াটির মধ্যে পার্থক্য দেখাতে পারে। kshপ্রস্থান করার $?পরে আরও নতুন সংস্করণগুলি যদি 255 এর চেয়ে বেশি হয় তবে তার পিতামাতার কাছে একই প্রস্থান স্থিতির প্রতিবেদন করতে সক্ষম হওয়ার জন্য একই সংকেত দিয়ে নিজেকে হত্যা করে। যদিও এটি একটি ভাল ধারণার মতো শোনাচ্ছে, এর অর্থ এই যে kshকোনও উত্পন্ন উত্পন্ন সংকেত দ্বারা প্রক্রিয়াটি নিহত হলে একটি অতিরিক্ত কোর ডাম্প (সম্ভাব্যত অন্যটি ওভাররাইট করা) উত্পন্ন করবে:

    $ ksh -c 'sh -c "kill \$\$"; printf "%x\n" "$?"'
    ksh: 16828: Terminated
    10f # 256 + 15
    $ ksh -c 'sh -c "kill -ILL \$\$"; exit'; printf '%x\n' "$?"
    ksh: 16816: Illegal instruction(coredump)
    Illegal instruction(coredump)
    104 # 256 + 15, ksh did indeed kill itself so as to report the same
        # exit status as sh. Older versions of `ksh93` would have returned
        # 4 instead.
    

    আপনি এমনকি বলতে ksh93পারেন যে কোনও বাগ রয়েছে তা হ'ল এটি কোনও ফাংশন দ্বারা সম্পন্ন হওয়া $?থেকে এসেও নিজেকে হত্যা করে return 257:

    $ ksh -c 'f() { return "$1"; }; f 257; exit'
    zsh: hangup     ksh -c 'f() { return "$1"; }; f 257; exit'
    # ksh kills itself with a SIGHUP so as to report a 257 exit status
    # to its parent
    
  • yashyashএকটি আপোষ প্রস্তাব। এটি ফিরে আসে 256 + 128 + n। এর অর্থ আমরা একটি নিহত প্রক্রিয়া এবং সঠিকভাবে সমাপ্ত হওয়া একটিতে পার্থক্য করতে পারি। এবং প্রস্থান করার পরে, এটি 128 + nনিজেই আত্মহত্যা না করে এবং এর যে-পার্শ্ব প্রতিক্রিয়া হতে পারে তা জানিয়ে দেবে।

    $ yash -c 'sh -c "kill \$\$"; printf "%x\n" "$?"'
    18f # 256 + 128 + 15
    $ yash -c 'sh -c "kill \$\$"; exit'; printf '%x\n' "$?"
    8f  # that's from a exit(143), yash was not killed
    

এর মান থেকে সংকেত পেতে $?, পোর্টেবল উপায়টি হ'ল kill -l:

$ /bin/kill 0
Terminated
$ kill -l "$?"
TERM

(বহনযোগ্যতার জন্য, আপনার কখনও সিগন্যাল নম্বর ব্যবহার করা উচিত নয়, কেবল সিগন্যালের নাম)

নন-বোর্ন ফ্রন্টে:

  • csh/ tcshএবং fishছাড়া যে অবস্থা বোর্ন শেল হিসাবে একই $statusপরিবর্তে $?(নোট যে zshএছাড়াও সেট করে $statusসাথে সামঞ্জস্যের জন্য csh(অতিরিক্ত দায়িত্বে থেকে $?))।
  • rc: প্রস্থান স্থিতিটি একই $statusসাথে রয়েছে, কিন্তু যখন কোনও সংকেত দ্বারা নিহত হয়, তখন সেই চলকটিতে সংখ্যার পরিবর্তে সিগন্যালের নাম থাকে (যেমন sigtermবা sigill+coreকোনও কোর উত্পন্ন হয়েছিল) যা শেলটির ভাল নকশার আর একটি প্রমাণ is ।
  • es। প্রস্থান স্থিতি একটি পরিবর্তনশীল নয়। আপনি যদি এটির যত্ন নেন তবে আপনি কমান্ডটি চালনা করুন:

    status = <={cmd}
    

    যা কোনও নম্বর sigtermবা sigsegv+coreপছন্দ মতো ফিরিয়ে দেবে rc

হয়তো সম্পূর্ণতার জন্য, আমরা উল্লেখ করা উচিত zsh'র $pipestatusএবং bashএর $PIPESTATUSঅ্যারে যে গত পাইপলাইন উপাদানের প্রস্থান অবস্থা ধারণ করে।

এবং সম্পূর্ণতার জন্য, যখন শেল ফাংশন এবং উত্সযুক্ত ফাইলগুলির কথা আসে, তখন ডিফল্ট ফাংশনগুলি শেষ কমান্ডের প্রস্থান স্থিতি দিয়ে ফিরে আসে, তবে returnবিল্টিনের সাথে স্পষ্টভাবে একটি রিটার্নের স্থিতিও সেট করতে পারে । এবং আমরা কিছু পার্থক্য এখানে দেখুন:

  • bashএবং mksh(আর 41 সাল থেকে, একটি রিগ্রেশন ^ বিনিময় দৃশ্যত ইচ্ছাকৃতভাবে পরিচয় করিয়ে দেওয়া ) সংখ্যাটি (ধনাত্মক বা নেতিবাচক) কে 8 বিট করে কেটে দেবে। সুতরাং উদাহরণস্বরূপ return 1234সেট $?করা হবে 210, 255 return -- -1সেট $?করা হবে ।
  • zshএবং pdksh(এবং ব্যতীত অন্যান্য ডেরাইভেটিভস mksh) যেকোন স্বাক্ষরিত 32 বিট দশমিক পূর্ণসংখ্যার (-2 31 থেকে 2 31 -1) (এবং সংখ্যাটি 32 বিটের মধ্যে ছাঁটাই করে) অনুমতি দেয়।
  • ashএবং yash0 থেকে 2 31 -1 পর্যন্ত কোনও ধনাত্মক পূর্ণসংখ্যার মঞ্জুরি দিন এবং এর বাইরে যে কোনও সংখ্যার জন্য ত্রুটি ফিরিয়ে দিন।
  • ksh93জন্য return 0করতে return 320সেট $?যেমন আছে, কিন্তু অন্য কিছু জন্য, 8 বিট অগ্রভাগ ছাঁটিয়া। ইতিমধ্যে উল্লিখিত হিসাবে সাবধান থাকুন যে 256 এবং 320 এর মধ্যে একটি নম্বর ফিরে আসা kshপ্রস্থান করার সময় নিজেকে হত্যা করতে পারে ।
  • rcএবং esকিছু এমনকি তালিকা ফেরত অনুমতি দিন।

এছাড়াও মনে রাখবেন যে কিছু শাঁস এছাড়াও বিশেষ মান ব্যবহার $?/ $statusকিছু ত্রুটি অবস্থার একটি প্রক্রিয়ার প্রস্থান অবস্থা নয়, মত প্রতিবেদন করতে 127বা 126জন্য পাওয়া যায়নি কমান্ড বা এক্সিকিউটেবল (ক sourced ফাইলে বা বাক্য গঠন ত্রুটি) ...


1
an exit code to their parentএবং to get the *status* of their child। আপনি "স্ট্যাটাস" এর উপর জোর যোগ করেছেন। কি exit codeএবং *status*একই? হ্যাঁ হ্যাঁ, দুটি নাম থাকার উত্স কী? কেস এক নয়, আপনি কি স্ট্যাটাসের সংজ্ঞা / রেফারেন্স দিতে পারবেন?
n611x007

2
এখানে 3 টি সংখ্যা রয়েছে। প্রস্থান কোড : সংখ্যা প্রেরণ exit()প্রস্থান অবস্থা : সংখ্যা দ্বারা প্রাপ্ত waitpid()যা প্রস্থান কোড, সংকেত সংখ্যা অন্তর্ভুক্ত কিনা ছিল মূল ডাম্প। এবং কিছু শেলগুলি তাদের বিশেষ ভেরিয়েবলগুলির মধ্যে একটিতে যে সংখ্যা সরবরাহ করে $?, ( $statusযা) এটি একটি প্রস্থান স্থিতির এমন একটি রূপান্তর যা কোনও সাধারণ সমাপ্তির ক্ষেত্রে প্রস্থান কোডটি ধারণ করে তবে এটি সংকেত সম্পর্কিত তথ্য বহন করে যদি প্রক্রিয়াটি হত্যা করা হয়েছিল (যেটিকে সাধারণত প্রস্থান স্থিতিও বলা হয় )। আমার উত্তরে সেটাই ব্যাখ্যা করা আছে।
স্টাফেন চেজেলাস

1
আচ্ছা ধন্যবাদ! আমি স্পষ্টভাবে এখানে পার্থক্য এই নোট প্রশংসা করি। প্রস্থান সম্পর্কে এই এক্সপ্রেশনগুলি কিছু জায়গায় এটি এতটা বিনিময়যোগ্য হিসাবে ব্যবহৃত হয় যা এটি তৈরির পক্ষে উপযুক্ত। শেল ভেরিয়েবলের বৈকল্পিকটির একটি (সাধারণ) নামও রয়েছে? সুতরাং আমি শেলগুলির বিবরণে যাওয়ার আগে এটি পরিষ্কারভাবে পরিষ্কার করার পরামর্শ দেব । আমি আপনার প্রথম বা দ্বিতীয় অনুচ্ছেদের পরে ব্যাখ্যাটি (আপনার মন্তব্য থেকে) সন্নিবেশ করানোর পরামর্শ দেব।
n611x007

1
আপনি কি পসিক্সের উদ্ধৃতিটিতে ইঙ্গিত করতে পারেন যা প্রথম 7 বিটগুলি সিগন্যাল হওয়ার বিষয়ে বলে? আমি > 128কেবল এই অংশটিই খুঁজে পেলাম : "একটি কমান্ডের সমাপ্ত হওয়া স্থিতিটি যে সমাপ্ত হয়েছিল কারণ এটি একটি সংকেত পেয়েছে 128 এর চেয়ে বেশি হিসাবে রিপোর্ট করা হবে" " pubs.opengroup.org/onlinepubs/9699919799/utilities/…
Ciro

1
@ কুওগলম, আমি মনে করি না যে এটি HTTP- র মাধ্যমে অন্য কোথাও প্রকাশ্যে পাওয়া যায়, আপনি এখনও এটি এনএনটিপি-র কাছ থেকে পেতে পারেন। বার্তা আইডি সন্ধান করুন efe764d811849b34eef24bfb14106f61@austingroupbugs.net(2015-05-06 থেকে) বাXref: news.gmane.org gmane.comp.standards.posix.austin.general:10726
স্টাফেন চেজেলাস

23

যখন কোনও প্রক্রিয়াটি প্রস্থান করে, এটি অপারেটিং সিস্টেমে একটি পূর্ণসংখ্যা মান প্রদান করে। বেশিরভাগ ইউনিক্স ভেরিয়েন্টে, এই মানটি 256 মডিউল নেওয়া হয়: লো-অর্ডার বিটগুলি ছাড়াও সমস্ত কিছু উপেক্ষা করা হয়। একটি শিশু প্রক্রিয়াটির স্থিতিটি তার ১ parent-বিট পূর্ণসংখ্যার মাধ্যমে তার পিতামাতার কাছে ফিরে আসে

  • বিট 0-6 (7 নিম্ন-অর্ডার বিট) হ'ল প্রক্রিয়াটি ধ্বংস করতে ব্যবহৃত সিগন্যাল নম্বর বা প্রক্রিয়াটি স্বাভাবিকভাবে উপস্থিত থাকলে 0;
  • বিট 7 সেট করা থাকে যদি প্রক্রিয়াটি একটি সংকেত দ্বারা মেরে ফেলা হয় এবং কোর ফেলে দেওয়া হয়;
  • বিটস 8-15 হ'ল প্রক্রিয়াটির প্রস্থান কোডটি যদি প্রক্রিয়াটি স্বাভাবিকভাবে উপস্থিত হয়, বা 0 টি যদি প্রক্রিয়াটি কোনও সংকেত দ্বারা নিহত হয়।

waitসিস্টেম কল বা এর এক ভাইবোনদের দ্বারা স্থিতি ফিরে আসে । পসিক্স প্রস্থান স্থিতি এবং সংকেত সংখ্যাটির সঠিক এনকোডিং নির্দিষ্ট করে না; এটি কেবল সরবরাহ করে

  • বহির্গমন স্থিতি একটি সংকেত বা সাধারণ প্রস্থানের সাথে মিল রাখে কি না তা বলার উপায়;
  • প্রস্থানটি স্বাভাবিকভাবে প্রস্থান হলে, প্রস্থান কোড অ্যাক্সেস করার একটি উপায়;
  • সিগন্যাল নম্বরটি অ্যাক্সেস করার একটি উপায়, যদি প্রক্রিয়াটি কোনও সংকেত দ্বারা নিহত হয়।

কড়া কথায় বলতে গেলে, যখন কোনও প্রক্রিয়া সংকেত দ্বারা নিহত হয় তখন কোনও প্রস্থান কোড নেই : পরিবর্তে যা আছে তা একটি প্রস্থান স্থিতি

শেল স্ক্রিপ্টে, কমান্ডের প্রস্থান স্থিতিটি বিশেষ ভেরিয়েবলের মাধ্যমে জানানো হয় $?। এই পরিবর্তনশীলটি একটি অস্পষ্টভাবে প্রস্থান স্থিতিকে এনকোড করে:

  • প্রক্রিয়াটি যদি স্বাভাবিকভাবে উপস্থিত হয় তবে $?তার প্রস্থান স্থিতি।
  • যদি প্রক্রিয়াটি কোনও সিগন্যাল দ্বারা মারা যায় তবে $?বেশিরভাগ সিস্টেমে 128 প্লাস সিগন্যাল নম্বর। POSIX কেবলমাত্র $?এই ক্ষেত্রে 128 এর চেয়ে বেশি ম্যান্ডেট ; ksh93 128 এর পরিবর্তে 256 যোগ করেছে I've আমি কখনও ইউনিক্স বৈকল্পিক দেখিনি যা সংকেত সংখ্যার সাথে একটি ধ্রুবক যোগ করা ছাড়া অন্য কিছু করে।

সুতরাং শেল স্ক্রিপ্টে আপনি নির্ধারিতভাবে বলতে পারবেন না যে কমান্ডটি সিগন্যাল দ্বারা হত্যা হয়েছিল বা ksh93 ব্যতীত 128 এর চেয়ে বেশি স্ট্যাটাস কোড সহ বেরিয়েছে কিনা। প্রোগ্রামগুলির পক্ষে 128 এর চেয়ে বেশি স্ট্যাটাস কোড সহ প্রস্থান করা খুব বিরল, কারণ প্রোগ্রামাররা $?অস্পষ্টতার কারণে এড়িয়ে চলে ।

সাইন ইন হল বেশিরভাগ ইউনিক্স বৈকল্পিকের সিগন্যাল 2, এভাবে $?সাইন্ট দ্বারা নিহত একটি প্রক্রিয়াটির জন্য 128 + 2 = 130 হয়। আপনি সাইনআপের জন্য 129, সিগকলের জন্য 137 ইত্যাদি দেখতে পাবেন SIG


আমার চেয়ে অনেক বেশি ভাল শব্দযুক্ত এবং আরও বেশি কিছু এমনকি যদি এটি सारত একই জিনিসগুলি বলে। আপনি এটি পরিষ্কার করতে চাইতে পারেন যে $?এটি কেবল বোর্নের মতো শেলগুলির জন্য। আরও দেখুন yashএকটি পৃথক (কিন্তু এখনও POSIX) আচরণের জন্য। এছাড়াও পসিক্স + এক্সএসআই (ইউনিক্স) অনুসারে, একটি kill -2 "$pid"প্রক্রিয়াটিতে একটি সাইন ইন প্রেরণ করবে, তবে প্রকৃত সংকেত সংখ্যা 2 নাও হতে পারে, তাই $? অগত্যা 128 + 2 (বা 256 + 2 বা 384 + 2) kill -l "$?"হবে না , তবে ফিরে আসবে INT, এ কারণেই আমি তাদের নিজের সংখ্যাটি উল্লেখ না করার জন্য বহনযোগ্যতার জন্য পরামর্শ দেব।
স্টাফেন চেজেলাস

8

এটি আপনার শেলের উপর নির্ভর করে। থেকে bash(1)মানুষ পাতা, শেল ব্যাকরণ অধ্যায়, সহজ কমান্ড উপধারা:

একটি ফেরত মান সহজ কমান্ড হয় [...] 128+ এন কমান্ড সংকেত দ্বারা বন্ধ হয় এন

যেহেতু SIGINTআপনার সিস্টেমে সিগন্যাল নম্বর 2, সুতরাং এটি বাশের অধীনে চালিত হওয়ার সময় ফেরতের মান 130 হয়।


1
আপনি কীভাবে বিশ্বে এটি খুঁজে পাবেন, বা কোথায় দেখতে হবে তাও জানেন? আমি তোমার প্রতিভা সম্মুখে।
কোরি ক্লেইন

1
@ কোরিক্লিন: বেশিরভাগ অভিজ্ঞতা। ওহ, এবং আপনি সম্ভবত signal(7)ম্যান পৃষ্ঠাটিও চাইবেন ।
ইগনাসিও ওয়াজকেজ-আব্রামস

শীতল জিনিস; আপনি কি জানেন যে আমি সুযোগ পেয়ে সি কনস্ট্যান্টগুলির সাথে ফাইলগুলিতে অন্তর্ভুক্ত করেছি? +1
রুই এফ রিবেইরো 24'18

@ কোরিক্লেইন আপনি কেন সঠিক উত্তর হিসাবে এটি নির্বাচন করেন নি?
রুই এফ রিবেইরো

3

এটি উল্লেখ করার সঠিক জায়গা বলে মনে হয় যে এসভিআর 4 ওয়েটিড () 1989 সালে প্রবর্তন করেছিল, তবে এখনও পর্যন্ত কোনও গুরুত্বপূর্ণ প্রোগ্রাম এটি ব্যবহার করে বলে মনে হচ্ছে না। ওয়েটিড () প্রস্থান () কোড থেকে পূর্ণ 32 বিট পুনরুদ্ধার করতে দেয়।

প্রায় 2 মাস আগে, আমি বোর্ন শেলের ওয়েট / চাকরি নিয়ন্ত্রণ অংশটি ওয়েটপিড () এর পরিবর্তে ওয়েটিড () ব্যবহার করতে আবার লিখি। এটি 0xFF সহ প্রস্থান কোডটি মাস্ক করে এমন সীমাবদ্ধতা অপসারণের জন্য করা হয়েছিল।

ওয়েটিড () ইন্টারফেসটি অনেক পরিচ্ছন্ন যে 1980 এর আগে ইউএনওএসের কুইট () কল ব্যতীত পূর্ববর্তী অপেক্ষা () বাস্তবায়ন।

আপনি ম্যান পৃষ্ঠাটি পড়তে আগ্রহী হতে পারেন:

http://schillix.sourceforge.net/man/man1/bosh.1.html

এবং বর্তমানে পৃষ্ঠা 8-এ শুরু হওয়া "প্যারামিটার সাবস্টিটিউশন" বিভাগটি দেখুন।

ওয়েটিড () ইন্টারফেসের জন্য নতুন ভেরিয়েবল .sh। * প্রবর্তন করা হয়েছে। এই ইন্টারফেসটির আর $ এর জন্য পরিচিত সংখ্যার জন্য অস্পষ্ট অর্থ নেই? এবং ইন্টারফেসিংকে আরও সহজ করে তুলুন।

মনে রাখবেন যে এই বৈশিষ্ট্যটি ব্যবহার করতে সক্ষম হওয়ার জন্য আপনার কাছে একটি পসিক্স কমপ্লায়েন্ট ওয়েটিড () থাকা দরকার, সুতরাং ম্যাক ওএস এক্স এবং লিনাক্স বর্তমানে এটি সরবরাহ করে না, তবে ওয়েটিড () ওয়েটপিড () কলটিতে অনুকরণ করা হয়েছে, তাই নন-পসিক্স প্ল্যাটফর্ম আপনি এখনও প্রস্থান কোড থেকে 8 টি বিট পাবেন।

সংক্ষেপে: .sh.status হ'ল সংখ্যাসূচক প্রস্থান কোড, .sh.code হ'ল সংখ্যাসূচক প্রস্থান কারণ।

আরও ভাল বহনযোগ্যতার জন্য, প্রস্থান কারণের পাঠ্য সংস্করণটির জন্য .sh.codename রয়েছে, যেমন "DUMPED" এবং .sh.termsig, প্রক্রিয়াটি সমাপ্ত হওয়া সংকেতের একক নাম।

আরও ভাল ব্যবহারের জন্য, দুটি বহির্গমন-প্রস্থান সম্পর্কিত .sh.codename মান রয়েছে: "NOEXEC" এবং "নটফাউন্ড" ব্যবহার করা হয় যখন কোনও প্রোগ্রাম চালু করা যায় না।

আমার রিপোর্টের 20 ঘন্টা পরে ফ্রিবিএসডি তাদের ওয়েটিড () কার্নেল বাগটি ঠিক করে দিয়েছে, লিনাক্স এখনও তাদের ঠিক করে শুরু করে নি। আমি আশা করি যে পসিক্সে থাকা এই বৈশিষ্ট্যটি প্রবর্তনের ২ years বছর পরে, সমস্ত ওএস শীঘ্রই এটিকে সমর্থন করবে।


সম্পর্কিত উত্তর হ'ল unix.stackexchange.com/a/453432/5132
JdeBP
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.