অভ্যন্তরীণভাবে সিগন্যালগুলি কীভাবে কাজ করে?


31

সাধারণভাবে, প্রসেস হত্যা করতে আমরা মত সংকেত উত্পন্ন SIGKILL, SIGTSTPইত্যাদি

তবে কে কীভাবে নির্দিষ্ট সংকেত অর্ডার করেছিল, কে এটি একটি নির্দিষ্ট প্রক্রিয়াতে প্রেরণ করেছে এবং সাধারণভাবে কীভাবে সংকেতগুলি তাদের কার্যক্রম পরিচালনা করে? অভ্যন্তরীণভাবে সিগন্যাল কীভাবে কাজ করবে?


প্রশ্নটি কিছুটা বোঝা শক্ত। আমি ক্ষমা চেয়ে নিচ্ছি এবং কোনও অনাদর বুঝি। আপনি কি জানতে চান যে কমান্ডটি চালিয়েছে যে একটি প্রক্রিয়া মেরেছে বা আপনি সিগিল এবং সিএনএসপিপি সম্পর্কে আরও জানতে চান?
টানা 21

@ মিস্টারমিস্টার আমি জানতে চাই যে একটি কমান্ড চালিয়েছে যে একটি প্রক্রিয়া মেরেছে এবং কীভাবে?
বরুণ ছঙ্গনি

উত্তর:


35

৫০,০০০ ফুট দৃশ্যটি হ'ল:

  1. অভ্যন্তরীণভাবে কার্নেল দ্বারা একটি সিগন্যাল তৈরি করা হয় (উদাহরণস্বরূপ, SIGSEGVযখন কোনও অবৈধ ঠিকানা অ্যাক্সেস করা হয়, বা SIGQUITআপনি Ctrl+ টি আঘাত করেন \), বা killসিস্কেল (বা একাধিক সম্পর্কিত) ব্যবহার করে একটি প্রোগ্রাম দ্বারা ।

  2. এটি যদি কোনও সিস্টেমে থাকে তবে কার্নেলটি নিশ্চিত করে যে কলিং প্রক্রিয়াটিতে সংকেত প্রেরণের যথেষ্ট সুযোগ রয়েছে। যদি তা না হয় তবে একটি ত্রুটি ফিরে আসে (এবং সংকেতটি ঘটে না)।

  3. যদি এটি দুটি বিশেষ সংকেতের মধ্যে একটি হয় তবে লক্ষ্য প্রক্রিয়া থেকে কোনও ইনপুট ছাড়াই কার্নেলটি নিঃশর্তভাবে এটিতে কাজ করে। দুটি বিশেষ সংকেত হ'ল সিগ্কিল এবং সিগস্টপ। ডিফল্ট ক্রিয়াকলাপ, ব্লকিং সিগন্যাল ইত্যাদি সম্পর্কে নীচের সমস্ত জিনিস এই দুটির জন্য অপ্রাসঙ্গিক।

  4. এর পরে, কার্নেল সিগন্যালটি দিয়ে কী করবে তা নির্ধারণ করে:

    1. প্রতিটি প্রক্রিয়ার জন্য, প্রতিটি সংকেতের সাথে যুক্ত একটি ক্রিয়া রয়েছে। অক্ষমতা একটি গুচ্ছ আছে, এবং প্রোগ্রাম বিভিন্ন বেশী ব্যবহার সেট করতে পারেন sigaction, signalইত্যাদি এই "এটি সম্পূর্ণ উপেক্ষা করা", "প্রক্রিয়া হত্যা", "একটি কোর ডাম্প প্রক্রিয়া হত্যা", "প্রক্রিয়াটিকে থামিয়ে" ভালো জিনিস অন্তর্ভুক্ত প্রভৃতি

    2. প্রোগ্রামগুলি সিগন্যাল বাই সিগন্যাল ভিত্তিতে সিগন্যাল সরবরাহ ("অবরুদ্ধ") বন্ধ করে দিতে পারে। তারপরে অবরুদ্ধ হওয়া অবধি সিগন্যালটি মুলতুবি থাকবে।

    3. প্রোগ্রাম গ্রহণ কিছু পদক্ষেপ নিজেই, তবে হয় এটি সিঙ্ক্রোনাস প্রক্রিয়া সংকেত প্রদান করা বদলে অনুরোধ করতে পারেন কার্নেল এর (সঙ্গে sigwait, এট। অল। বা signalfd) অথবা অ্যাসিঙ্ক্রোনাস (বিঘ্নিত যাই হোক না কেন প্রক্রিয়া করছে, এবং একটি নির্দিষ্ট ফাংশন কল করে)।

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

৫০,০০০ ফুট নন দৃশ্যের জন্য, man 7 signalকার্নেল ইন্টার্নাল ডকুমেন্টেশন (বা উত্স) ব্যবহার করে দেখুন।


"দুটি বিশেষ সিগন্যাল হ'ল সিগ্কিল এবং সিগস্টপ" তাই সাইন কন্ট কী হতে পারে ...
হউক লেগেইজিং

@ হককিজিং সিগকন্ট হ'ল সিগন্যাল যা সাইনস্টপকে বাতিল করে দেয়। ডকুমেন্টেশন এটিকে বিশেষ হিসাবে তালিকাভুক্ত করে না ... সুতরাং আমি নিশ্চিত না যে প্রযুক্তিগতভাবে কোনও প্রক্রিয়া এটিকে উপেক্ষা করার জন্য সেট করতে পারে, তবে আপনি এটি পুনরায় চালু করতে সক্ষম হবেন না (কেবল এটি সাইন ইন করুন)।
ডারোবার্ট

22

সিগন্যাল বাস্তবায়ন খুব জটিল এবং কার্নেল নির্দিষ্ট। অন্য কথায়, বিভিন্ন কার্নেল সংকেতগুলি আলাদাভাবে প্রয়োগ করবে। সরলীকৃত ব্যাখ্যা নিম্নরূপ:

একটি বিশেষ রেজিস্টার মানের উপর ভিত্তি করে সিপিইউর স্মৃতিতে একটি ঠিকানা রয়েছে যেখানে এটি একটি "বিঘ্নিত বর্ণনাকারী টেবিল" খুঁজে পাওয়ার প্রত্যাশা করে যা আসলে ভেক্টর টেবিল। প্রতিটি সম্ভাব্য ব্যতিক্রমের জন্য একটি ভেক্টর রয়েছে, যেমন শূন্য দ্বারা বিভাজন, বা আইএনটি 3 (ডিবাগ) এর মতো ফাঁদ। সিপিইউ যখন ব্যতিক্রমের মুখোমুখি হয় তখন এটি স্ট্যাকের পতাকা এবং বর্তমান নির্দেশিকা পয়েন্টার সংরক্ষণ করে এবং তারপরে প্রাসঙ্গিক ভেক্টর দ্বারা নির্দিষ্ট ঠিকানাটিতে ঝাঁপিয়ে পড়ে। লিনাক্সে এই ভেক্টর সর্বদা কার্নেলের দিকে নির্দেশ করে, সেখানে ব্যতিক্রম হ্যান্ডলার রয়েছে। সিপিইউ এখন সম্পন্ন হয়েছে, এবং লিনাক্স কার্নেলটি গ্রহণ করবে।

দ্রষ্টব্য, আপনি সফ্টওয়্যার থেকে একটি ব্যতিক্রম ট্রিগার করতে পারেন। উদাহরণস্বরূপ, ব্যবহারকারী টিপুন CTRL- C, তারপরে এই কলটি কার্নেলে যায় যা তার নিজস্ব ব্যতিক্রম হ্যান্ডলার বলে calls সাধারণভাবে, হ্যান্ডেলারের কাছে যাওয়ার বিভিন্ন উপায় রয়েছে, তবে একই বেসিক জিনিসটি নির্বিশেষে: প্রসঙ্গটি স্ট্যাকের মধ্যে সংরক্ষণ করা হয় এবং কার্নেলের ব্যতিক্রম হ্যান্ডলারটি লাফিয়ে যায়।

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

সিগন্যালটি প্রেরণের জন্য কার্নেল যা করে তা প্রথমে একটি মান সেট করে যা সংকেতের প্রকার SIGHUPবা যা কিছু নির্দেশ করে। এটি কেবল একটি পূর্ণসংখ্যা। প্রতিটি প্রক্রিয়াতে একটি "মুলতুবি সংকেত" মেমরি অঞ্চল থাকে যেখানে এই মানটি সঞ্চিত থাকে। তারপরে কার্নেল সিগন্যাল তথ্য সহ একটি ডেটা স্ট্রাকচার তৈরি করে। এই কাঠামোর মধ্যে একটি সংকেত "স্বভাব" অন্তর্ভুক্ত রয়েছে যা ডিফল্ট, উপেক্ষা বা হ্যান্ডেল হতে পারে। কার্নেলটি তার নিজের ফাংশনটি কল করে do_signal()। পরবর্তী পর্ব শুরু হয়।

do_signal()এটি সিগন্যালটি পরিচালনা করবে কিনা তা আগে সিদ্ধান্ত নেয় । উদাহরণস্বরূপ, এটি যদি একটি হত্যা হয় , তবে do_signal()কেবল প্রক্রিয়াটি মেরে ফেলবে , গল্পের শেষ। অন্যথায়, এটি স্বভাবের দিকে নজর দেয়। যদি স্বভাবটি ডিফল্ট do_signal()হয় তবে সিগন্যালের উপর নির্ভরশীল ডিফল্ট নীতি অনুসারে সংকেত পরিচালনা করে। যদি স্বভাবটি হ্যান্ডেল হয় তবে এর অর্থ ব্যবহারকারী প্রোগ্রামে কোনও ফাংশন রয়েছে যা প্রশ্নে সংকেতটি পরিচালনা করার জন্য ডিজাইন করা হয়েছে এবং এই ফাংশনটির পয়েন্টারটি পূর্বোক্ত ডেটা কাঠামোর মধ্যে থাকবে। এই ক্ষেত্রে do_signal () অন্য কার্নেল ফাংশনটিকে কল করে,handle_signal()যার পরে ব্যবহারকারী মোডে ফিরে যাওয়া এবং এই ফাংশনটি কল করার প্রক্রিয়াটি চলে। এই হ্যান্ডঅফের বিশদটি অত্যন্ত জটিল। আপনার প্রোগ্রামের এই কোডটি সাধারণত যখন আপনি কার্যগুলিতে ব্যবহার করেন তখন আপনার প্রোগ্রামের সাথে স্বয়ংক্রিয়ভাবে সংযুক্ত থাকে signal.h

মুলতুবি থাকা সিগন্যাল মানটি যথাযথভাবে পরীক্ষা করে কর্নেলটি নির্ধারণ করতে পারে যে প্রক্রিয়াটি সমস্ত সংকেতগুলি পরিচালনা করছে কিনা, এবং যদি তা না হয় তবে যথাযথ ব্যবস্থা গ্রহণ করবে, যা সংকেতের উপর নির্ভর করে প্রক্রিয়াটিকে ঘুমিয়ে রাখতে বা এটি হত্যা করতে বা অন্য ক্রিয়া করতে পারে।


15

যদিও এই প্রশ্নের উত্তর দেওয়া হয়েছে, আমাকে লিনাক্স কার্নেলের ইভেন্টগুলির বিস্তারিত প্রবাহ পোস্ট করুন।
এটি সম্পূর্ণ লিনাক্স পোস্ট থেকে অনুলিপি করা হয়েছে : লিনাক্স সিগন্যালস - sklinuxblog.blogspot.in এ "লিনাক্স পোস্ট" ব্লগে ইন্টারনালগুলি।

সিগন্যাল ব্যবহারকারী স্পেস সি প্রোগ্রাম

আসুন একটি সাধারণ সিগন্যাল ব্যবহারকারী স্পেস সি প্রোগ্রাম লিখতে শুরু করুন:

#include<signal.h>
#include<stdio.h>

/* Handler function */
void handler(int sig) {
    printf("Receive signal: %u\n", sig);
};

int main(void) {
    struct sigaction sig_a;

    /* Initialize the signal handler structure */
    sig_a.sa_handler = handler;
    sigemptyset(&sig_a.sa_mask);
    sig_a.sa_flags = 0;

    /* Assign a new handler function to the SIGINT signal */
    sigaction(SIGINT, &sig_a, NULL);

    /* Block and wait until a signal arrives */
    while (1) {
            sigsuspend(&sig_a.sa_mask);
            printf("loop\n");
    }
    return 0;
};

এই কোডটি SIGINT সিগন্যালের জন্য একটি নতুন হ্যান্ডলার নিয়োগ দেয়। Ctrl+ Cকী সংমিশ্রণটি ব্যবহার করে চলমান প্রক্রিয়াতে সাইন ইন পাঠানো যেতে পারে । যখন Ctrl+ Cটিপুন তখন অ্যাসিঙ্ক্রোনাস সিগন্যাল SIGINT এ টাস্কে প্রেরণ করা হয়। এটি kill -INT <pid>অন্যান্য টার্মিনালে কমান্ড প্রেরণের সমতুল্য ।

আপনি যদি এটি করেন kill -l(এটি একটি ছোট হাতের অক্ষর L, যা "তালিকার জন্য দাঁড়িয়েছে") আপনি বিভিন্ন সংকেতগুলি জানতে পারবেন যা চলমান প্রক্রিয়াতে প্রেরণ করা যেতে পারে।

[root@linux ~]# kill -l
 1) SIGHUP        2) SIGINT        3) SIGQUIT       4) SIGILL        5) SIGTRAP
 6) SIGABRT       7) SIGBUS        8) SIGFPE        9) SIGKILL      10) SIGUSR1
11) SIGSEGV      12) SIGUSR2      13) SIGPIPE      14) SIGALRM      15) SIGTERM
16) SIGSTKFLT    17) SIGCHLD      18) SIGCONT      19) SIGSTOP      20) SIGTSTP
21) SIGTTIN      22) SIGTTOU      23) SIGURG       24) SIGXCPU      25) SIGXFSZ
26) SIGVTALRM    27) SIGPROF      28) SIGWINCH     29) SIGIO        30) SIGPWR
31) SIGSYS       34) SIGRTMIN     35) SIGRTMIN+1   36) SIGRTMIN+2   37) SIGRTMIN+3
38) SIGRTMIN+4   39) SIGRTMIN+5   40) SIGRTMIN+6   41) SIGRTMIN+7   42) SIGRTMIN+8
43) SIGRTMIN+9   44) SIGRTMIN+10  45) SIGRTMIN+11  46) SIGRTMIN+12  47) SIGRTMIN+13
48) SIGRTMIN+14  49) SIGRTMIN+15  50) SIGRTMAX-14  51) SIGRTMAX-13  52) SIGRTMAX-12
53) SIGRTMAX-11  54) SIGRTMAX-10  55) SIGRTMAX-9   56) SIGRTMAX-8   57) SIGRTMAX-7
58) SIGRTMAX-6   59) SIGRTMAX-5   60) SIGRTMAX-4   61) SIGRTMAX-3   62) SIGRTMAX-2
63) SIGRTMAX-1   64) SIGRTMAX

এছাড়াও নিম্নলিখিত কী সংমিশ্রণ নির্দিষ্ট সংকেত প্রেরণে ব্যবহার করা যেতে পারে:

  • Ctrl+ C- অ্যাপ্লিকেশনটি সমাপ্ত করার জন্য ডিফল্ট ক্রিয়াটি কোন সাইন ইনটি প্রেরণ করে।
  • Ctrl+ \  - অ্যাপ্লিকেশন ডাম্পিং কোরটি সমাপ্ত করার জন্য কোন ডিফল্ট ক্রিয়া হ'ল SIGQUIT প্রেরণ করে।
  • Ctrl+ Z- প্রোগ্রামটি স্থগিত করে এমন সাইনস্টপ প্রেরণ করে।

আপনি যদি উপরের সি প্রোগ্রামটি কম্পাইল করে চালনা করেন তবে নীচের আউটপুটটি পাবেন:

[root@linux signal]# ./a.out
Receive signal: 2
loop
Receive signal: 2
loop
^CReceive signal: 2
loop

এমনকি Ctrl+ Cবা kill -2 <pid>প্রক্রিয়াটি শেষ হবে না। পরিবর্তে এটি সিগন্যাল হ্যান্ডলার কার্যকর করে ফিরে আসবে।

প্রক্রিয়াটিতে কীভাবে সংকেত প্রেরণ করা হয়

যদি আমরা কোনও প্রক্রিয়াতে সংকেত প্রেরণকারীটির অভ্যন্তরীণ দেখতে পাই এবং __send_signalফাংশনে ডাম্পস্ট্যাকের সাথে জেপ্রোব রাখি আমরা নীচের কল ট্রেস দেখতে পাব:

May  5 16:18:37 linux kernel: dump_stack+0x19/0x1b
May  5 16:18:37 linux kernel: my_handler+0x29/0x30 (probe)
May  5 16:18:37 linux kernel: complete_signal+0x205/0x250
May  5 16:18:37 linux kernel: __send_signal+0x194/0x4b0
May  5 16:18:37 linux kernel: send_signal+0x3e/0x80
May  5 16:18:37 linux kernel: do_send_sig_info+0x52/0xa0
May  5 16:18:37 linux kernel: group_send_sig_info+0x46/0x50
May  5 16:18:37 linux kernel: __kill_pgrp_info+0x4d/0x80
May  5 16:18:37 linux kernel: kill_pgrp+0x35/0x50
May  5 16:18:37 linux kernel: n_tty_receive_char+0x42b/0xe30
May  5 16:18:37 linux kernel:  ? ftrace_ops_list_func+0x106/0x120
May  5 16:18:37 linux kernel: n_tty_receive_buf+0x1ac/0x470
May  5 16:18:37 linux kernel: flush_to_ldisc+0x109/0x160
May  5 16:18:37 linux kernel: process_one_work+0x17b/0x460
May  5 16:18:37 linux kernel: worker_thread+0x11b/0x400
May  5 16:18:37 linux kernel: rescuer_thread+0x400/0x400
May  5 16:18:37 linux kernel:  kthread+0xcf/0xe0
May  5 16:18:37 linux kernel:  kthread_create_on_node+0x140/0x140
May  5 16:18:37 linux kernel:  ret_from_fork+0x7c/0xb0
May  5 16:18:37 linux kernel: ? kthread_create_on_node+0x140/0x140

সুতরাং সিগন্যাল প্রেরণের জন্য প্রধান ফাংশন কলগুলি এরকম হয়:

First shell send the Ctrl+C signal using n_tty_receive_char
n_tty_receive_char()
isig()
kill_pgrp()
__kill_pgrp_info()
group_send_sig_info() -- for each PID in group call this function
do_send_sig_info()
send_signal()
__send_signal() -- allocates a signal structure and add to task pending signals
complete_signal()
signal_wake_up()
signal_wake_up_state()  -- sets TIF_SIGPENDING in the task_struct flags. Then it wake up the thread to which signal was delivered.

এখন সমস্ত কিছু সেট আপ হয়ে গেছে এবং task_structপ্রক্রিয়াটিতে প্রয়োজনীয় পরিবর্তনগুলি করা হয় ।

সিগন্যাল হ্যান্ডলিং

সিস্টেম কল থেকে ফিরে আসে বা বাধা থেকে ফেরতের কাজটি সম্পন্ন হলে কোনও প্রক্রিয়া দ্বারা সংকেতটি চেক / পরিচালনা করা হয়। সিস্টেম কল থেকে ফিরে আসা ফাইলটিতে উপস্থিত রয়েছে entry_64.S

ফাংশনটি int_signal ফাংশন বলা হয় entry_64.Sযা থেকে ফাংশনটি কল করে do_notify_resume()

আসুন ফাংশনটি পরীক্ষা করি do_notify_resume()। আমাদের মধ্যে TIF_SIGPENDINGপতাকাটি সেট আছে কিনা তা এই ফাংশনটি পরীক্ষা করে task_struct:

 /* deal with pending signal delivery */
 if (thread_info_flags & _TIF_SIGPENDING)
  do_signal(regs);
do_signal calls handle_signal to call the signal specific handler
Signals are actually run in user mode in function:
__setup_rt_frame -- this sets up the instruction pointer to handler: regs->ip = (unsigned long) ksig->ka.sa.sa_handler;

সিস্টেমে কল এবং সংকেত

"ধীরে ধীরে" সিস্টেমগুলি যেমন পড়া / লেখার ব্লক করা, প্রক্রিয়াগুলিকে অপেক্ষার স্থানে রাখুন: TASK_INTERRUPTIBLEবা TASK_UNINTERRUPTIBLE

সিগন্যালের মাধ্যমে রাজ্যের কোনও কাজকে রাজ্যে TASK_INTERRUPTIBLEপরিবর্তন করা হবে TASK_RUNNINGTASK_RUNNINGমানে একটি প্রক্রিয়া নির্ধারিত হতে পারে।

যদি মৃত্যুদণ্ড কার্যকর করা হয় তবে এর সংকেত হ্যান্ডলারটি "ধীর" সিস্টেল শেষ হওয়ার আগে চালানো হবে। syscallডিফল্টরূপে সম্পন্ন করে না।

তাহলে SA_RESTARTপতাকা সেট, syscallসংকেত হ্যান্ডলার শেষ হবার পর রিস্টার্ট করা হচ্ছে।

তথ্যসূত্র


সাইটে অবদান রাখার প্রচেষ্টা করার জন্য ধন্যবাদ, তবে (১) আপনি যদি অন্য কোনও সাইট থেকে শব্দ (শব্দটির জন্য শব্দ, অক্ষরের জন্য চিঠি, ব্যাকরণ এবং বিরামচিহ্ন ত্রুটি সহ) অনুলিপি করতে চলেছেন তবে আপনাকে বলা উচিত যে আপনি করছেন সুতরাং, আরও স্পষ্টভাবে। উত্সটি একটি "রেফারেন্স" হিসাবে তালিকাভুক্ত করা, যদিও প্রয়োজনীয়, পর্যাপ্ত নয়। আপনি যদি (K_K = sk?) ব্লগটির লেখক না হন তবে এই ক্ষেত্রে আপনাকে লিঙ্ক করার প্রয়োজন নেই - তবে আপনি যদি এটি করেন তবে আপনাকে অবশ্যই প্রকাশ করতে হবে (অর্থাত্ বলুন) যে এটি আপনার। … (চালিয়ে যাওয়া)
জি-ম্যান

(চালিয়ে যাওয়া) ... (২) আপনার উত্স (আপনি যে ব্লগ থেকে অনুলিপি করেছেন) খুব ভাল নয়। প্রশ্নটি জিজ্ঞাসা করার চার বছর হয়ে গেছে; আপনি অনুলিপি করার জন্য আরও ভাল রেফারেন্স খুঁজে পেতে পারেন না? (আপনি যদি মূল লেখক, দুঃখিত,) পূর্বোক্ত ব্যাকরণ এবং বিরামচিহ্ন ত্রুটিগুলি (এবং সাধারণভাবে মোড়ক শব্দ, এবং দুর্বল বিন্যাস) ছাড়াও, এটি ভুল। (২ ক) সিটিআরএল + জেড SIGTSTP প্রেরণ করে, SIGSTOP না। (সিগ্রেটএসপি, সিগন্টর্মের মতো, ধরা যেতে পারে; সিগ্কেল্পের মতো সিগস্টপও পারে না।) ... (চালনা করা)
জি-ম্যান

(চালিয়ে যাওয়া) ... (2 বি) শেলটি Ctrl + C সিগন্যাল প্রেরণ করে না। সিগন্যাল প্রেরণে শেলের কোনও ভূমিকা নেই (ব্যবহারকারী যখন killকমান্ডটি ব্যবহার করে , যা শেল বিল্টিন অন্তর্ভুক্ত থাকে) ব্যতীত। (২ গ) }কোনও ফাংশন বন্ধ হওয়ার পরে সেমিকোলনগুলি , কঠোরভাবে বলতে গেলে, ত্রুটিগুলি নয়, এগুলি অপ্রয়োজনীয় এবং অত্যন্ত প্রচলিত। (3) সবকিছু ঠিক থাকলেও এটি প্রশ্নের খুব ভাল উত্তর হবে না। (৩ এ) প্রশ্নটি কিছুটা অস্পষ্ট থাকা সত্ত্বেও, অভিনেতা (ব্যবহারকারী এবং প্রক্রিয়া ) সংকেত কীভাবে প্রবর্তন করেন (যেমন, প্রেরণ ) তার দিকে মনোনিবেশ করা বলে মনে হচ্ছে । … (চালিয়ে যাওয়া)
জি-ম্যান

(চালিয়ে যাওয়া) ... উত্তরটি কার্নেলের দ্বারা উত্পাদিত সিগন্যালগুলিতে (বিশেষত, কীবোর্ড-উত্পাদিত সংকেতগুলি) এবং প্রাপক প্রক্রিয়া কীভাবে সংকেতগুলিতে প্রতিক্রিয়া দেখায় তাতে মনোনিবেশ করা হবে বলে মনে হয়। (3 খ) প্রশ্নটি মনে হচ্ছে «কেউ আমার প্রক্রিয়াটি মেরেছিল - কে করেছে এবং কীভাবে? Answer উত্তরে সিগন্যাল হ্যান্ডলিং এপিআই, কার্নেলের রুটিন, কার্নেল ডিবাগিং (জেপ্রোবে?), কার্নেল স্ট্যাক ট্রেস এবং এবং কার্নেল ডেটা স্ট্রাকচার। আইএমও, এটি অনুপযুক্তভাবে নিম্ন স্তরের - বিশেষত যেহেতু এটি এমন কোনও রেফারেন্স সরবরাহ করে না যেখানে পাঠক এই অভ্যন্তরীণ কাজগুলি সম্পর্কে আরও জানতে পারেন।
জি-ম্যান

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