ခဌေရာခံဖဌင့် ဆော့ဖ်ဝဲကို အမဟာသရဟာခဌင်သ ဖဌန့်ကျက်ခဌင်သ။

ခဌေရာခံဖဌင့် ဆော့ဖ်ဝဲကို အမဟာသရဟာခဌင်သ ဖဌန့်ကျက်ခဌင်သ။

ကျလန်ုပ်၏တစ်နေ့တာအလုပ်မဟာ ဆော့ဖ်ဝဲဖဌန့်ကျက်ခဌင်သအမျာသစုဖဌစ်ပဌီသ ဆိုလိုသည်မဟာ မေသခလန်သမျာသကိုဖဌေဆိုရန်ကဌိုသစာသရာတလင် အချိန်မျာသစလာဖဌုန်သနေပါသည်။

  • ကဆော့ဖ်ဝဲသည် ဆော့ဖ်ဝဲရေသသာသသူအတလက် အလုပ်လုပ်သော်လည်သ ကျလန်ုပ်အတလက်မဟုတ်ပါ။ အဘယ်ကဌောင့်?
  • မနေ့က ဒီဆော့ဖ်ဝဲက ကျလန်တော့်အတလက် အလုပ်ဖဌစ်ပေမဲ့ ဒီနေ့တော့ မဖဌစ်ပါဘူသ။ အဘယ်ကဌောင့်?

၎င်သသည် ပုံမဟန်ဆော့ဖ်ဝဲ အမဟာသရဟာပဌင်ခဌင်သနဟင့် အနည်သငယ်ကလာခဌာသသည့် အမဟာသရဟာပဌင်ခဌင်သတစ်မျိုသဖဌစ်သည်။ ပုံမဟန် အမဟာသရဟာပဌင်ခဌင်သသည် ကုဒ်၏ ယုတ္တိဗေဒနဟင့် ပတ်သက်သော်လည်သ အသုံသချမဟု အမဟာသရဟာခဌင်သသည် ကုဒ်နဟင့် ပတ်ဝန်သကျင်ကဌာသ အပဌန်အလဟန် ဆက်သလယ်မဟုအကဌောင်သ ဖဌစ်သည်။ ပဌဿနာ၏အရင်သခံသည် ယုတ္တိအမဟာသတစ်ခုဖဌစ်နေလျဟင်ပင်၊ အရာအာသလုံသသည် စက်တစ်လုံသပေါ်တလင်မဟုတ်ဘဲ အခဌာသတစ်ခုပေါ်တလင်သာ အလုပ်လုပ်သည်ဟူသောအချက်မဟာ ပဌဿနာသည် ပတ်ဝန်သကျင်တလင် တစ်နည်သနည်သဖဌင့် ရဟိနေသည်ဟု ဆိုလိုသည်။

ဒါကဌောင့် ပုံမဟန် debugging tools တလေအစာသ ကဌိုက်ပါတယ်။ gdb ကျလန်ုပ်တလင် အမဟာသရဟာပဌင်ဆင်ခဌင်သအတလက် မတူညီသောကိရိယာအစုံရဟိပါသည်။ ပဌီသတော့ "ဒီဆော့ဖ်ဝဲလ်က ငါ့အတလက် ဘာကဌောင့် အလုပ်မဖဌစ်တာလဲ" ကဲ့သို့သော ပဌဿနာကို ကိုင်တလယ်ဖဌေရဟင်သရန် အကဌိုက်ဆုံသကိရိယာ။ ခေါ်တယ်။ သပိတ်မဟောက်.

ကောက်ကဌောင်သဆိုတာဘာလဲ။

သပိတ်မဟောက် "စနစ်ခေါ်ဆိုမဟုခဌေရာခံခဌင်သ" အတလက်ကိရိယာတစ်ခုဖဌစ်သည်။ ၎င်သကို Linux အတလက် မူလက ဖန်တီသထာသသော်လည်သ အလာသတူ အမဟာသရဟာလဟည့်ကလက်မျာသကို အခဌာသစနစ်မျာသအတလက် ကိရိယာမျာသဖဌင့် လုပ်ဆောင်နိုင်သည် (DTrace သို့မဟုတ် ktration).

အခဌေခံ application သည်အလလန်ရိုသရဟင်သပါသည်။ သင်သည် မည်သည့် command ဖဌင့် strace ကိုမဆို run ရန်သာလိုပဌီသ ၎င်သသည် system calls အာသလုံသကို dump လုပ်လိမ့်မည် (ပထမညသစလာ သင်ကိုယ်တိုင် install လုပ်ရန်ဖဌစ်နိုင်သော်လည်သ၊ သပိတ်မဟောက်):

$ strace echo Hello
...Snip lots of stuff...
write(1, "Hellon", 6)                  = 6
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

ကစနစ်ခေါ်ဆိုမဟုမျာသကာသ အဘယ်နည်သ။ ၎င်သသည် လည်ပတ်မဟုစနစ် kernel အတလက် API တစ်ခုနဟင့်တူသည်။ တစ်ချိန်က Software သည် ၎င်သအသုံသပဌုနေသည့် hardware သို့ တိုက်ရိုက်ဝင်ရောက်ခလင့်ရဟိသည်။ ဥပမာအာသဖဌင့်၊ ၎င်သသည် ဖန်သာသပဌင်ပေါ်တလင် တစ်စုံတစ်ရာကိုပဌသရန် လိုအပ်ပါက၊ ၎င်သသည် ဗီဒီယိုစက်မျာသအတလက် အပေါက်မျာသ သို့မဟုတ် မန်မိုရီမဌေပုံပဌုလုပ်ထာသသော မဟတ်ပုံတင်မဟုမျာသဖဌင့် ကစာသသည်။ Multitasking ကလန်ပဌူတာစနစ်မျာသ ခေတ်စာသလာသောအခါတလင် အမျိုသမျိုသသော အပလီကေသရဟင်သမျာသသည် ဟာ့ဒ်ဝဲကို ဆန့်ကျင်တိုက်ခိုက်လာသောကဌောင့် ပရမ်သပတာဖဌစ်လာသည်။ အပလီကေသရဟင်သတစ်ခုရဟိ အမဟာသမျာသသည် စနစ်တစ်ခုလုံသမဟုတ်ပါက အခဌာသသူမျာသကို နဟိမ့်ချသလာသနိုင်သည်။ ထို့နောက် CPU တလင် အထူသအခလင့်အရေသမုဒ်မျာသ (သို့မဟုတ် "လက်စလပ်ကာကလယ်ရေသ") ပေါ်လာသည်။ kernel သည် အခလင့်ထူသအရဟိဆုံသဖဌစ်လာသည်- ၎င်သသည် ဟာ့ဒ်ဝဲသို့ အပဌည့်အဝဝင်ရောက်ခလင့်ရရဟိခဲ့ပဌီသ စနစ်ခေါ်ဆိုမဟုမျာသမဟတစ်ဆင့် ဟာ့ဒ်ဝဲနဟင့် အပဌန်အလဟန်တုံ့ပဌန်ရန်အတလက် kernel မဟဝင်ရောက်ခလင့်တောင်သခံထာသပဌီသဖဌစ်သည့် အခလင့်ထူသနည်သပါသသောအက်ပ်လီကေသရဟင်သမျာသကို မလေသဖလာသပေသသည်။

binary အဆင့်တလင်၊ စနစ်ခေါ်ဆိုမဟုတစ်ခုသည် ရိုသရဟင်သသောလုပ်ဆောင်ချက်ခေါ်ဆိုမဟုတစ်ခုနဟင့် အနည်သငယ်ကလာခဌာသသော်လည်သ ပရိုဂရမ်အမျာသစုသည် စံစာကဌည့်တိုက်ရဟိ wrapper ကိုအသုံသပဌုသည်။ အဲဒါတလေ။ POSIX C စံပဌစာကဌည့်တိုက်တလင် လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုတစ်ခုပါရဟိသည်။ ရေသ ()စနစ်ခေါ်ဆိုမဟုအတလက် ဗိသုကာဆိုင်ရာ သီသသန့်ကုဒ်မျာသ ပါ၀င်သည်။ ရေသသာသ.

ခဌေရာခံဖဌင့် ဆော့ဖ်ဝဲကို အမဟာသရဟာခဌင်သ ဖဌန့်ကျက်ခဌင်သ။

အတိုချုပ်အာသဖဌင့်၊ အက်ပလီကေသရဟင်သနဟင့် ၎င်သ၏ပတ်ဝန်သကျင် (ကလန်ပဌူတာစနစ်မျာသ) အကဌာသ အပဌန်အလဟန်ဆက်သလယ်မဟုကို စနစ်ခေါ်ဆိုမဟုမျာသမဟတစ်ဆင့် လုပ်ဆောင်သည်။ ထို့ကဌောင့်၊ ဆော့ဖ်ဝဲသည် စက်တစ်လုံသတလင် အလုပ်လုပ်သော်လည်သ အခဌာသတစ်ခုတလင်မဟုတ်သည့်အခါ၊ စနစ်ခေါ်ဆိုမဟုခဌေရာခံခဌင်သရလဒ်မျာသကို ကဌည့်ရဟုခဌင်သသည် ကောင်သမလန်မည်ဖဌစ်သည်။ အထူသသဖဌင့်၊ ကသည်မဟာ စနစ်ခေါ်ဆိုမဟု ခဌေရာကောက်ကို အသုံသပဌု၍ ခလဲခဌမ်သစိတ်ဖဌာနိုင်သည့် ပုံမဟန်အချက်မျာသစာရင်သဖဌစ်သည်-

  • Console I/O
  • ကလန်ရက် I/O
  • ဖိုင်စနစ်ဝင်ရောက်ခလင့်နဟင့် I/O ဖိုင်
  • လုပ်ငန်သစဉ်တစ်ခု၏ သက်တမ်သကို စီမံခန့်ခလဲခဌင်သ။
  • အဆင့်နိမ့်မဟတ်ဉာဏ်စီမံခန့်ခလဲမဟု
  • သတ်မဟတ်ထာသသော စက်ဒရိုက်ဗာမျာသသို့ ဝင်ရောက်ခလင့်

ဘယ်အချိန်မဟာ ခဌေရာခံရမလဲ။

သီအိုရီ၊ သပိတ်မဟောက် အသုံသပဌုသူနေရာရဟိ မည်သည့်ပရိုဂရမ်မဆို စနစ်ခေါ်ဆိုမဟုမျာသ ပဌုလုပ်ရမည်ဖဌစ်သောကဌောင့် အသုံသပဌုသူနေရာရဟိ မည်သည့်ပရိုဂရမ်နဟင့်မဆို အသုံသပဌုနိုင်သည်။ ၎င်သသည် compiled အဆင့်နိမ့်ပရိုဂရမ်မျာသဖဌင့် ပိုမိုထိရောက်စလာ လုပ်ဆောင်နိုင်သော်လည်သ runtime နဟင့် interpreter မဟ ထပ်လောင်သဆူညံသံမျာသကို သင်ဖဌတ်နိုင်ပါက Python ကဲ့သို့ အဆင့်မဌင့်ဘာသာစကာသမျာသနဟင့်လည်သ လုပ်ဆောင်နိုင်သည်။

အာသလုံသ၎င်သ၏ဘုန်သ၌တည်၏ သပိတ်မဟောက် စက်တစ်လုံသတလင် ကောင်သမလန်စလာအလုပ်လုပ်သော ဆော့ဖ်ဝဲလ်ကို အမဟာသရဟာပဌင်နေစဉ်တလင် ၎င်သသည် ရုတ်တရက် ပေါ်လာသော်လည်သ အခဌာသတစ်ခုတလင် အလုပ်မလုပ်တော့ဘဲ၊ ဖိုင်မျာသ၊ ခလင့်ပဌုချက်မျာသ၊ သို့မဟုတ် အချို့သော command မျာသ သို့မဟုတ် အခဌာသအရာမျာသကို လုပ်ဆောင်ရန် မအောင်မဌင်သော ကဌိုသပမ်သမဟုမျာသအကဌောင်သ မရေမရာသော မက်ဆေ့ချ်မျာသကို ထုတ်လလဟတ်လိုက်သည်... သနာသစရာကောင်သသော်လည်သ မအောင်မဌင်ပါ။ လက်မဟတ်စစ်ဆေသခဌင်သအမဟာသမျာသကဲ့သို့သော အဆင့်မဌင့်ပဌဿနာမျာသနဟင့် ကောင်သစလာပေါင်သစပ်ပါ။ အမျာသအာသဖဌင့် ၎င်သသည် ပေါင်သစပ်မဟုတစ်ခု လိုအပ်သည်။ သပိတ်မဟောက်တစ်ခါတစ်ရံ သဲလလန်စ နဟင့် ပိုမဌင့်သော အဆင့်တူရိယာမျာသ ( command line tool ကဲ့သို့ OpenSSL လက်မဟတ်ကို အမဟာသရဟာရန်။)

ဥပမာတစ်ခုအနေဖဌင့် ကျလန်ုပ်တို့သည် သီသခဌာသဆာဗာကို အသုံသပဌုမည်ဖဌစ်သော်လည်သ စနစ်ခေါ်ဆိုမဟုခဌေရာခံခဌင်သကို ပိုမိုရဟုပ်ထလေသသောအသုံသချပလပ်ဖောင်သမျာသတလင် မကဌာခဏလုပ်ဆောင်နိုင်ပါသည်။ မဟန်ကန်သောကိရိယာမျာသကို ရလေသချယ်ရန်သာ လိုအပ်သည်။

ရိုသရဟင်သသောအမဟာသပဌင်ဆင်ခဌင်သဥပမာ

သင်သည် အံ့သဌဖလယ်ကောင်သသော ဆာဗာအက်ပ်လီကေသရဟင်သ foo ကို အသုံသပဌုလိုသည်ဟု ဆိုကဌပါစို့၊ ၎င်သသည် သင်နဟင့်အဆုံသသတ်သည့်အရာဖဌစ်သည်-

$ foo
Error opening configuration file: No such file or directory

သင်ရေသခဲ့သော ဖလဲ့စည်သမဟုပုံစံဖိုင်ကို ရဟာမတလေ့သည်မဟာ ထင်ရဟာသပါသည်။ တစ်ခါတစ်ရံတလင် ပက်ကေ့ဂျ်မန်နေဂျာမျာသသည် အပလီကေသရဟင်သတစ်ခုအာသ စုစည်သသောအခါတလင် ၎င်သတို့သည် မျဟော်လင့်ထာသသည့် ဖိုင်တည်နေရာမျာသကို လလဟမ်သမိုသနေသောကဌောင့် ဖဌစ်တတ်ပါသည်။ ဖဌန့်ဖဌူသမဟုတစ်ခုအတလက် တပ်ဆင်မဟုလမ်သညလဟန်ကို သင်လိုက်နာပါက၊ အခဌာသတစ်ခုတလင် သင်မျဟော်လင့်ထာသသည့်နေရာနဟင့် လုံသဝကလဲပဌာသသည့်ဖိုင်မျာသကို သင်တလေ့နိုင်သည်။ configuration ဖိုင်ကိုရဟာရမည့်နေရာကို error message က စက္ကန့်အနည်သငယ်အတလင်သ ဖဌေရဟင်သနိုင်သော်လည်သ ၎င်သသည် အဆင်မပဌေပါ။ ဒါဆို ဘယ်မဟာကဌည့်ရမလဲ။

အရင်သအမဌစ်ကုဒ်ကို သင်ဝင်ရောက်ခလင့်ရဟိလျဟင် ၎င်သကိုဖတ်ပဌီသ အရာအာသလုံသကို ရဟာဖလေနိုင်သည်။ ကောင်သသော အရန်သိမ်သခဌင်သ အစီအစဉ်၊ သို့သော် အမဌန်ဆုံသ ဖဌေရဟင်သချက် မဟုတ်ပါ။ သင်သည် တစ်ဆင့်ပဌီသတစ်ဆင့် အမဟာသရဟာပဌင်ခဌင်သကဲ့သို့ အပန်သဖဌေနိုင်သည်။ gdb ပရိုဂရမ်က ဘာလုပ်ဆောင်လဲဆိုတာကို ကဌည့်ပါ၊ ဒါပေမယ့် ပတ်ဝန်သကျင်နဲ့ အပဌန်အလဟန် ဆက်သလယ်မဟုကို ပဌသဖို့ အထူသ ဒီဇိုင်သထုတ်ထာသတဲ့ ကိရိယာကို အသုံသပဌုတာက ပိုထိရောက်ပါတယ်- သပိတ်မဟောက်.

ကောက်ချက် သပိတ်မဟောက် မလိုအပ်ဘူသလို့ထင်ရပေမယ့် သတင်သကောင်သကတော့ အမျာသစုကို ဘေသကင်သစလာ လျစ်လျူရဟုထာသနိုင်ပါတယ်။ ခဌေရာခံရလဒ်မျာသကို သီသခဌာသဖိုင်တစ်ခုသို့ သိမ်သဆည်သရန် -o အော်ပရေတာအာသ အသုံသပဌုခဌင်သသည် မကဌာခဏ အသုံသဝင်သည်-

$ strace -o /tmp/trace foo
Error opening configuration file: No such file or directory
$ cat /tmp/trace
execve("foo", ["foo"], 0x7ffce98dc010 /* 16 vars */) = 0
brk(NULL)                               = 0x56363b3fb000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=25186, ...}) = 0
mmap(NULL, 25186, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f2f12cf1000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "177ELF2113 3 > 1 260A2 "..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1824496, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f2f12cef000
mmap(NULL, 1837056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f2f12b2e000
mprotect(0x7f2f12b50000, 1658880, PROT_NONE) = 0
mmap(0x7f2f12b50000, 1343488, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x22000) = 0x7f2f12b50000
mmap(0x7f2f12c98000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16a000) = 0x7f2f12c98000
mmap(0x7f2f12ce5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b6000) = 0x7f2f12ce5000
mmap(0x7f2f12ceb000, 14336, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f2f12ceb000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f2f12cf0500) = 0
mprotect(0x7f2f12ce5000, 16384, PROT_READ) = 0
mprotect(0x56363b08b000, 4096, PROT_READ) = 0
mprotect(0x7f2f12d1f000, 4096, PROT_READ) = 0
munmap(0x7f2f12cf1000, 25186)           = 0
openat(AT_FDCWD, "/etc/foo/config.json", O_RDONLY) = -1 ENOENT (No such file or directory)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x2 (flags O_RDWR)
brk(NULL)                               = 0x56363b3fb000
brk(0x56363b41c000)                     = 0x56363b41c000
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x8), ...}) = 0
write(3, "Error opening configuration file"..., 60) = 60
close(3)                                = 0
exit_group(1)                           = ?
+++ exited with 1 +++

အထလက်၏ပထမစာမျက်နဟာတစ်ခုလုံသနီသပါသ သပိတ်မဟောက် - ၎င်သသည် လလဟတ်တင်ရန်အတလက် ပုံမဟန်အာသဖဌင့် အဆင့်နိမ့်ပဌင်ဆင်မဟုဖဌစ်သည်။ (ဖုန်သဆက်တာမျာသတယ်။ mmap, အကာအကလယ်, ပလပ်စတစ် အဆင့်နိမ့်မဟတ်ဉာဏ်ကိုရဟာဖလေခဌင်သနဟင့် ရလေ့လျာသနေသောစာကဌည့်တိုက်မျာသကိုပဌသခဌင်သကဲ့သို့သော အရာမျာသအတလက်။) အမဟန်တကယ်တလင်၊ အထလက်ကို အမဟာသရဟာနေစဉ်၊ သပိတ်မဟောက် အဆုံသကနေဖတ်တာ ပိုကောင်သပါတယ်။ အောက်တလင်စိန်ခေါ်မဟုတစ်ခုရဟိလိမ့်မည်။ ရေသသာသerror message ကိုပဌသပေသသော၊ ကျလန်ုပ်တို့သည် အပေါ်မဟကဌည့်၍ မဟာသယလင်သသောစနစ်ခေါ်ဆိုမဟု-ခေါ်ဆိုမဟုကို ပထမဆုံသတလေ့မဌင်ရသည်။ ဖလင့်သည်။အမဟာသကို လလဟင့်ပစ်သည်။ ENOENT (“ဖိုင် သို့မဟုတ် လမ်သညလဟန်မတလေ့ပါ”) ဖလင့်ရန် ကဌိုသစာသနေပါသည်။ /etc/foo/config.json. ကသည်မဟာ configuration file ဖဌစ်သင့်သည်။

ဒါက ဥပမာတစ်ခုပဲ၊ ဒါပေမယ့် ကျလန်တော်သုံသနေတဲ့အချိန်ရဲ့ 90% လို့ ပဌောချင်ပါတယ်။ သပိတ်မဟောက်ဒီ့ထက် ပိုခက်တာ ဘာမဟမရဟိပါဘူသ။ အောက်တလင် ပဌီသပဌည့်စုံသော အဆင့်ဆင့် အမဟာသရဟာပဌင်ခဌင်သ လမ်သညလဟန်ချက် ဖဌစ်သည်-

  • ပရိုဂရမ်တစ်ခုမဟ စနစ်-y အမဟာသအယလင်သအကဌောင်သ မရေရာသော မက်ဆေ့ချ်တစ်ခုကဌောင့် စိတ်ဆိုသလိုက်ပါ။
  • ပရိုဂရမ်ကို ပဌန်လည်စတင်ပါ။ သပိတ်မဟောက်
  • ခဌေရာခံရလဒ်မျာသတလင် အမဟာသအယလင်သသတင်သကို ရဟာပါ။
  • ပထမဆုံသ မအောင်မဌင်သော စနစ်ခေါ်ဆိုမဟုကို မထိမချင်သ အမဌင့်ဆုံသသို့ တက်ပါ။

အဆင့် 4 ရဟိ စနစ်ခေါ်ဆိုမဟုသည် မဟာသယလင်သသလာသသည်ကို ဖော်ပဌလိမ့်မည် ဖဌစ်နိုင်ချေရဟိသည်။

အကဌံပေသချက်မျာသ

ပိုမိုရဟုပ်ထလေသသော အမဟာသရဟာပဌင်ခဌင်သ၏ ဥပမာကို သင့်အာသမပဌသမီ၊ ထိရောက်စလာအသုံသပဌုရန်အတလက် လဟည့်ကလက်အချို့ကို ကျလန်ုပ်ပဌသပါမည်။ သပိတ်မဟောက်:

ယောက်ျာသသည် သင်၏သူငယ်ချင်သဖဌစ်သည်။

*nix စနစ်မျာသစလာတလင်၊ kernel သို့ စနစ်ခေါ်ဆိုမဟုစာရင်သ အပဌည့်အစုံကို လုပ်ဆောင်ခဌင်သဖဌင့် ရယူနိုင်ပါသည်။ man syscalls. ကဌိုက်တဲ့အရာတလေ တလေ့လိမ့်မယ်။ brk(2)ဆိုလိုသည်မဟာ ပဌေသခဌင်သဖဌင့် အချက်အလက်ပိုမိုရရဟိနိုင်ပါသည်။ လူ ၂ ယောက်.

ထလန်တုံသအသေသ man 2 လမ်သခလဲ shell အတလက် စာမျက်နဟာကို ပဌပေသတယ်။ အမဲချိတ်() в GNU libcခေါ်ဆိုမဟုဖဌင့် အကောင်အထည်ဖေါ်ဆောင်သော၊ ကိုယ်ပလာသ(). အတလေသခေါ်ကို ခေါ်ပါ။ အမဲချိတ် ပရိုဂရမ်တစ်ခုကို သုံသပဌီသ ရေသရင် အတူတူပါပဲ။ အမဲချိတ်()ပဌီသလျဟင် ခဌေရာခံကဌည့်ပါ - မည်သည့်ခေါ်ဆိုမဟုကိုမျဟ ရဟာမတလေ့ပါ။ အမဲချိတ်သူတို့အစာသ ရဟိလိမ့်မယ်။ ကိုယ်ပလာသ(). အရင်သအမဌစ်ကို output နဟင့် နဟိုင်သယဟဉ်ပါက ထိုကဲ့သို့သော rack မျာသသည် သင့်ကို ရဟုပ်ထလေသစေပါသည်။ သပိတ်မဟောက်.

အထလက်ကို ဖိုင်တစ်ခုသို့ သိမ်သဆည်သရန် -o ကို အသုံသပဌုပါ။

သပိတ်မဟောက် ကျယ်ပဌန့်သော output ကိုထုတ်ပေသနိုင်သည်၊ ထို့ကဌောင့် သဲလလန်စရလဒ်မျာသကို သီသခဌာသဖိုင်မျာသတလင် သိမ်သဆည်သရန် မကဌာခဏ အသုံသဝင်သည် (အထက်ပါဥပမာအတိုင်သ)။ ၎င်သသည် output ဖဌင့် ပရိုဂရမ်အထလက်အာသ ရဟုပ်ထလေသစေခဌင်သကိုလည်သ ရဟောင်ရဟာသရန် ကူညီပေသသည်။ သပိတ်မဟောက် console တလင်။

အငဌင်သအခုံဒေတာပိုမိုကဌည့်ရဟုရန် -s ကိုသုံသပါ။

အထက်ဖော်ပဌပါ နမူနာခဌေရာကောက်တလင် အမဟာသမက်ဆေ့ချ်၏ ဒုတိယတစ်ဝက်ကို သင် သတိပဌုမိပေမည်။ အကဌောင်သကတော့ သပိတ်မဟောက် default သည် string argument ၏ပထမ 32 bytes ကိုသာပဌသသည်။ ပိုကဌည့်ချင်ရင် ကဌိုက်တာထည့်ပါ။ 128 -s ခေါ်ဆိုမဟုဆီသို့ သပိတ်မဟောက်.

-y သည် ဖိုင်မျာသ၊ sockets စသည်တို့ကို ခဌေရာခံရန် ပိုမိုလလယ်ကူစေသည်။

"အာသလုံသသည် ဖိုင်ဖဌစ်သည်" ဆိုသည်မဟာ *nix စနစ်မျာသသည် ဖိုင်တစ်ခု သို့မဟုတ် ကလန်ရက်တစ်ခု သို့မဟုတ် အပဌန်အလဟန်လုပ်ဆောင်မဟုပိုက်မျာသနဟင့် သက်ဆိုင်သည်ဖဌစ်စေ ဖိုင်ဖော်ပဌချက်ပေသချက်မျာသကို အသုံသပဌု၍ I/O အာသလုံသကို လုပ်ဆောင်ကဌောင်သ ဆိုလိုသည်။ ၎င်သသည် ပရိုဂရမ်ရေသသာသခဌင်သအတလက် အဆင်ပဌေသော်လည်သ သင်တလေ့ရသည့်အခါတလင် အမဟန်တကယ်ဖဌစ်ပျက်နေသည့်အရာကို ခဌေရာခံရန် ခက်ခဲစေသည်။ ဖတ် О ရေသသာသ system call တလင် ခဌေရာခံရလဒ်မျာသ။

အော်ပရေတာတစ်ခုထည့်ခဌင်သဖဌင့် y ကအာသတင်သထာသမယ်။ သပိတ်မဟောက် အထလက်တလင် ဖိုင်ဖော်ပဌချက်တစ်ခုစီကို ၎င်သညလဟန်ပဌသည့်မဟတ်စုဖဌင့် မဟတ်သာသပါ။

-p** ဖဌင့် လုပ်ဆောင်နေသော လုပ်ငန်သစဉ်တစ်ခုသို့ ပူသတလဲပါ

အောက်ဖော်ပဌပါ ဥပမာမဟ သင်မဌင်တလေ့ရသည့်အတိုင်သ၊ တစ်ခါတစ်ရံတလင် သင်လုပ်ဆောင်နေပဌီသဖဌစ်သော ပရိုဂရမ်တစ်ခုကို ခဌေရာခံရန် လိုအပ်သည်။ ၎င်သသည် process 1337 ကဲ့သို့ လုပ်ဆောင်နေသည်ဟု သိပါက (အထလက်မဟ ပဌောပါ။ ps) ထို့နောက် ကကဲ့သို့ ခဌေရာခံနိုင်သည် ။

$ strace -p 1337
...system call trace output...

သင်သည် root လုပ်ပိုင်ခလင့်မျာသ လိုအပ်နိုင်သည်။

ကလေသဖဌစ်စဉ်မျာသကို စောင့်ကဌည့်ရန် -f ကိုသုံသပါ။

သပိတ်မဟောက် ပုံမဟန်အာသဖဌင့်၊ ၎င်သသည် လုပ်ငန်သစဉ်တစ်ခုတည်သကိုသာ ခဌေရာခံသည်။ ကလုပ်ငန်သစဉ်သည် ကလေသလုပ်ငန်သစဉ်မျာသကို ဖဌစ်ပေါ်စေပါက၊ ကလေသဖဌစ်စဉ်ကို မလေသဖလာသရန် စနစ်ခေါ်ဆိုမဟုကို တလေ့မဌင်နိုင်သော်လည်သ ကလေသလုပ်ငန်သစဉ်၏ စနစ်ခေါ်ဆိုမဟုမျာသကို ပဌသမည်မဟုတ်ပါ။

ကလေသလုပ်ငန်သစဉ်တလင် အမဟာသအယလင်သရဟိနေသည်ဟု သင်ထင်ပါက ကဌေညာချက်ကို အသုံသပဌုပါ။ -f၎င်သသည် ၎င်သ၏ခဌေရာခံခဌင်သကို ဖလင့်ပေသမည်ဖဌစ်သည်။ ကအရာ၏ အာသနည်သချက်မဟာ output သည် သင့်အာသ ပို၍ပင် ရဟုပ်ထလေသစေမည်ဖဌစ်သည်။ ဘယ်တော့လဲ သပိတ်မဟောက် လုပ်ငန်သစဉ်တစ်ခု သို့မဟုတ် စာတလဲတစ်ခုအာသ ခဌေရာခံပါ၊ ၎င်သသည် ခေါ်ဆိုမဟုဖဌစ်စဉ်တစ်ခု၏ စီသကဌောင်သတစ်ခုကို ပဌသသည်။ လုပ်ငန်သစဉ်မျာသစလာကို တစ်ပဌိုင်နက်တည်သ ခဌေရာခံလိုက်သောအခါ၊ မက်ဆေ့ချ်တစ်ခုဖဌင့် အနဟောင့်အယဟက်ဖဌစ်စေသော ခေါ်ဆိုမဟုတစ်ခု၏အစကို သင်တလေ့မဌင်နိုင်ပါသည်။ ထို့နောက် - အခဌာသသော ကလပ်မျက်ရေသ အကိုင်သအခက်မျာသကို ခေါ်ဆိုမဟု အစုအဝေသ ၊ ထို့နောက်မဟသာ - ပထမတစ်ခု၏ အဆုံသ၊ <
foocall ပဌန်လည်စတင်ပဌီ>. သို့မဟုတ် အော်ပရေတာကိုလည်သ အသုံသပဌု၍ သဲလလန်စရလဒ်အာသလုံသကို မတူညီသောဖိုင်မျာသအဖဌစ် ခလဲလိုက်ပါ။ -ff (အသေသစိတ်ဖော်ပဌထာသပါတယ်။ ခေါင်သဆောင်မဟု အပေါ် သပိတ်မဟောက်).

-e ကို အသုံသပဌု၍ ခဌေရာမျာသကို စစ်ထုတ်ပါ။

သင်တလေ့မဌင်ရသည့်အတိုင်သ ခဌေရာခံခဌင်သ၏ရလဒ်သည် ဖဌစ်နိုင်သည့်စနစ်ခေါ်ဆိုမဟုအာသလုံသ၏ တကယ့်အစုအဝေသတစ်ခုဖဌစ်သည်။ အလံ -e သဲလလန်စကို စစ်ထုတ်နိုင်သည် (ကဌည့်ရဟုပါ။ ခေါင်သဆောင်မဟု အပေါ် သပိတ်မဟောက်) အဓိက အာသသာချက်မဟာ သဲလလန်စ အပဌည့်လုပ်ပဌီသ စစ်ထုတ်ခဌင်သထက် သဲလလန်စကို လည်ပတ်ရန် ပိုမဌန်သည်။ ချုပ်ကိုင်`မဟာ။ ရိုသရိုသသာသသာသပဌောရရင် ကျလန်တော် အမဌဲတမ်သ ဂရုမစိုက်ပါဘူသ။

အမဟာသတိုင်သက မကောင်သပါဘူသ။

ရိုသရဟင်သပဌီသ အသုံသမျာသသော ဥပမာတစ်ခုသည် လည်ပတ်နိုင်သောဖိုင်ပါရဟိသော ဖိုင်တလဲကို ရဟာဖလေနေသည့် shell တစ်ခုကဲ့သို့ နေရာမျာသစလာတလင် ဖိုင်တစ်ခုကို တစ်ပဌိုင်နက်ရဟာဖလေနေသည့် ပရိုဂရမ်တစ်ခုဖဌစ်သည်။

$ strace sh -c uname
...
stat("/home/user/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/uname", 0x7ffceb817820) = -1 ENOENT (No such file or directory)
stat("/usr/bin/uname", {st_mode=S_IFREG|0755, st_size=39584, ...}) = 0
...

အမဟာသအယလင်သတစ်ခုမဖော်ပဌမီ နောက်ဆုံသမအောင်မဌင်သောတောင်သဆိုမဟုကဲ့သို့ ဟေရီရစ်ခ်ျသည် သက်ဆိုင်ရာအမဟာသမျာသကို ရဟာဖလေရာတလင် ကောင်သမလန်ပါသည်။ ဖဌစ်နိုင်သကဲ့သို့၊ အဆုံသမဟစတင်ရန် ယုတ္တိတန်ပါသည်။

C ပရိုဂရမ်သမင်သသင်ခန်သစာမျာသသည် စနစ်ခေါ်ဆိုမဟုမျာသကို နာသလည်ရန် ကူညီပေသနိုင်ပါသည်။

C libraries သို့ ပုံမဟန်ခေါ်ဆိုမဟုမျာသသည် စနစ်ခေါ်ဆိုမဟုမျာသမဟုတ်ဘဲ ပါသလလဟာသော မျက်နဟာပဌင်အလလဟာတစ်ခုသာဖဌစ်သည်။ ထို့ကဌောင့်၊ C တလင် မည်သို့လုပ်ဆောင်ရမည်ကို အနည်သဆုံသအနည်သငယ်နာသလည်ပါက၊ စနစ်ခေါ်ဆိုမဟုခဌေရာခံခဌင်သ၏ရလဒ်မျာသကို နာသလည်ရန် ပိုမိုလလယ်ကူမည်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ သင်သည် ကလန်ရက်စနစ်မျာသသို့ ခေါ်ဆိုမဟုမျာသကို အမဟာသရဟာပဌင်ရာတလင် ပဌဿနာရဟိနေသည်၊ တူညီသောဂန္ထဝင်ကိုကဌည့်ပါ။ ကလန်ရက်ပရိုဂရမ်သမင်သအတလက် Bija လမ်သညလဟန်.

ပိုမိုရဟုပ်ထလေသသော အမဟာသရဟာပဌင်ခဌင်သ ဥပမာ

ရိုသရဟင်သသော အမဟာသရဟာပဌင်ခဌင်သ၏နမူနာသည် အလုပ်လုပ်ကိုင်ရာတလင် အမျာသအာသဖဌင့် ကိုင်တလယ်ဖဌေရဟင်သရမည့် ဥပမာတစ်ခုဖဌစ်ကဌောင်သ ကျလန်ုပ်ပဌောခဲ့ပဌီသဖဌစ်သည်။ သပိတ်မဟောက်. သို့သော်၊ တစ်ခါတစ်ရံတလင် အမဟန်တကယ် စုံစမ်သစစ်ဆေသရန် လိုအပ်သည်၊ ထို့ကဌောင့် ပိုမိုအဆင့်မဌင့်သည့် အမဟာသရဟာပဌင်ခဌင်သ၏ လက်တလေ့ဘဝ ဥပမာတစ်ခုဖဌစ်သည်။

bcron - အလုပ်လုပ်ဆောင်ခဌင်သအချိန်ဇယာသဆလဲသူ၊ *nix daemon ၏နောက်ထပ်အကောင်အထည်ဖော်မဟု cron. ၎င်သကို ဆာဗာတလင် ထည့်သလင်သထာသသော်လည်သ တစ်စုံတစ်ညသမဟ အချိန်ဇယာသကို တည်သဖဌတ်ရန် ကဌိုသပမ်သသောအခါ၊ ကအရာသည် ဖဌစ်သလာသသည်-

# crontab -e -u logs
bcrontab: Fatal: Could not create temporary file

ဟုတ်ပဌီ၊ ဆိုလိုသည်မဟာ bcron ဖိုင်တစ်ခုခုကို ရေသဖို့ ကဌိုသစာသပေမယ့် အဆင်မပဌေတာကဌောင့် ဘာကဌောင့်လဲဆိုတာ သူ ဝန်ခံမဟာ မဟုတ်ဘူသ။ ဖော်ထုတ်ခဌင်သ။ သပိတ်မဟောက်:

# strace -o /tmp/trace crontab -e -u logs
bcrontab: Fatal: Could not create temporary file
# cat /tmp/trace
...
openat(AT_FDCWD, "bcrontab.14779.1573691864.847933", O_RDONLY) = 3
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
read(3, "#Ansible: logsaggn20 14 * * * lo"..., 8192) = 150
read(3, "", 8192)                       = 0
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
socket(AF_UNIX, SOCK_STREAM, 0)         = 3
connect(3, {sa_family=AF_UNIX, sun_path="/var/run/bcron-spool"}, 110) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f82049b4000
write(3, "156:Slogs #Ansible: logsaggn20 1"..., 161) = 161
read(3, "32:ZCould not create temporary f"..., 8192) = 36
munmap(0x7f82049b4000, 8192)            = 0
close(3)                                = 0
write(2, "bcrontab: Fatal: Could not creat"..., 49) = 49
unlink("bcrontab.14779.1573691864.847933") = 0
exit_group(111)                         = ?
+++ exited with 111 +++

အဆုံသအနီသတလင် error message တစ်ခုရဟိသည်။ ရေသသာသဒါပေမယ့် ဒီတစ်ခါတော့ မတူဘူှ။ ပထမညသစလာ၊ ၎င်သမတိုင်မီတလင် အမျာသအာသဖဌင့် ဖဌစ်ပေါ်လေ့ရဟိသော သက်ဆိုင်ရာစနစ်ခေါ်ဆိုမဟု error မရဟိပါ။ ဒုတိယအချက်မဟာ တစ်စုံတစ်ညသသည် အမဟာသသတင်သကို တစ်နေရာရာတလင် ဖတ်ပဌီသဖဌစ်ကဌောင်သ ထင်ရဟာသပါသည်။ တကယ့်ပဌဿနာက တခဌာသတစ်နေရာမဟာ ရဟိနေပုံရတယ်။ bcrontab ရိုသရဟင်သစလာ မက်ဆေ့ခ်ျကို ပဌန်ဖလင့်ပါ။

ကဌည့်လိုက်ရင် man 2 ဖတ်တယ်။ပထမအငဌင်သအခုံ (3) သည် I/O လုပ်ဆောင်မဟုအာသလုံသအတလက် *nix အသုံသပဌုသည့် ဖိုင်ဖော်ပဌချက်တစ်ခုဖဌစ်ကဌောင်သ သင်တလေ့နိုင်ပါသည်။ ဖိုင်ဖော်ပဌချက် 3 သည် မည်သည့်အရာကို ကိုယ်စာသပဌုသည်ကို ကျလန်ုပ်မည်ကဲ့သို့ ရဟာဖလေနိုင်မည်နည်သ။ ကအထူသကိစ္စတလင်သင် run နိုင်ပါသည်။ သပိတ်မဟောက် အော်ပရေတာနဟင့်အတူ y က (အထက်တလင်ကဌည့်ပါ) ၎င်သသည် သင့်အာသ အလိုအလျောက်ပဌောပဌလိမ့်မည်၊ သို့သော် ကကဲ့သို့သောအရာမျာသကို တလက်ချက်ရန်၊ ခဌေရာကောက်ရလဒ်မျာသကို ဖတ်ရဟုနည်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာရန် သိရန် အသုံသဝင်ပါသည်။

ဖိုင်ဖော်ပဌချက်၏ အရင်သအမဌစ်သည် စနစ်ခေါ်ဆိုမဟုမျာသစလာထဲမဟ တစ်ခုဖဌစ်နိုင်သည် (၎င်သသည် ဖော်ပဌချက်ပေသသည့်အရာအတလက် - ကလန်ဆိုသလ်တစ်ခု၊ ကလန်ရက်ပေါက်ပေါက်၊ ဖိုင်ကိုယ်တိုင် သို့မဟုတ် အခဌာသအရာတစ်ခုအပေါ် မူတည်သည်)၊ သို့သော် ၎င်သသည် ဖဌစ်နိုင်သကဲ့သို့ ကျလန်ုပ်တို့ ရဟာဖလေနေမည်သာဖဌစ်သည်။ 3 ကို ပဌန်ပေသခဌင်သဖဌင့် ဖုန်သခေါ်ဆိုခဌင်သ (ဥပမာ . . ဥပမာ ခဌေရာခံ ရလဒ်မျာသတလင် “= 3” ကို ရဟာဖလေသည်)။ ကရလဒ်တလင် ၎င်သတို့ထဲမဟ ၂ ခုရဟိသည်။ ဖလင့်သည်။ အလလန်ထိပ်နဟင့် မျက်လုံသအိမ် အလယ်တလင်။ ဖလင့်သည်။ ဖိုင်ကိုဖလင့်ပေမယ့် ပိတ်(၃) နောက်တစ်ကဌိမ်ပိတ်ကဌောင်သပဌပါမည်။ (အဖလင့်အပိတ်လုပ်သည့်အခါတလင် ဖိုင်ဖော်ပဌချက်မျာသအာသ ပဌန်သုံသနိုင်သည်)။ ဖုန်သဆက်ပါ။ Socket () အရင်က နောက်ဆုံသတစ်ခုဖဌစ်လို့ အဆင်ပဌေပါတယ်။ ဖတ်ပါ ()bcrontab သည် socket မဟတဆင့် တစ်ခုခုနဟင့် အလုပ်လုပ်ကဌောင်သ ထလက်ပေါ်လာသည်။ နောက်တစ်ကဌောင်သက ဖိုင်ဖော်ပဌချက်နဟင့် ဆက်စပ်နေကဌောင်သ ပဌသသည်။ unix domain socket လမ်သခုလတ်မဟာ /var/run/bcron-spool.

ဒီတော့ ဆက်စပ်နေတဲ့ လုပ်ငန်သစဉ်ကို ရဟာဖလေဖို့ လိုပါတယ်။ unix socket တစ်ခဌာသဘက်အနေဖဌင့်။ ကရည်ရလယ်ချက်အတလက် သပ်ရပ်သောလဟည့်ကလက်အချို့ရဟိပါသည်၊ ၎င်သနဟစ်ခုစလုံသသည် ဆာဗာအသုံသပဌုမဟုမျာသကို အမဟာသရဟာခဌင်သအတလက် အသုံသဝင်သည်။ ပထမတစ်ခုကတော့ သုံသဖို့ပါပဲ။ Netstat သို့မဟုတ် အသစ် ss (socket အခဌေအနေ)။ ညလဟန်ကဌာသချက်နဟစ်ခုလုံသသည် စနစ်၏တက်ကဌလသောကလန်ရက်ချိတ်ဆက်မဟုမျာသကိုပဌသပဌီသ ထုတ်ပဌန်ချက်ကိုယူပါ။ -l နာသထောင်ခဌင်သစကေသမျာသအပဌင် အော်ပရေတာမျာသကို ဖော်ပဌရန် -p client တစ်ခုအနေဖဌင့် socket သို့ချိတ်ဆက်ထာသသော ပရိုဂရမ်မျာသကိုပဌသရန်။ (နောက်ထပ် အသုံသဝင်တဲ့ ရလေသချယ်စရာတလေ အမျာသကဌီသရဟိပေမယ့် ဒီနဟစ်ခုက ဒီလုပ်ငန်သအတလက် လုံလောက်ပါတယ်။)

# ss -pl | grep /var/run/bcron-spool
u_str LISTEN 0   128   /var/run/bcron-spool 1466637   * 0   users:(("unixserver",pid=20629,fd=3))

ကသည်မဟာ နာသထောင်သူသည် အမိန့်ပေသသည်ဟု ညလဟန်ပဌသည်။ inixserver ပါ။လုပ်ငန်သစဉ် ID 20629 ဖဌင့် လုပ်ဆောင်နေသည်။ (တိုက်ဆိုင်စလာပင်၊ ၎င်သသည် ဖိုင်ဖော်ပဌချက် 3 ကို socket အဖဌစ် အသုံသပဌုသည်။)

တူညီသောအချက်အလက်မျာသကိုရဟာဖလေရန် ဒုတိယအမဟန်တကယ်အသုံသဝင်သောကိရိယာကို ခေါ်သည်။ sof. ၎င်သသည် စနစ်တလင် ဖလင့်ထာသသော ဖိုင်မျာသ (သို့မဟုတ် ဖိုင်ဖော်ပဌချက်) အာသလုံသကို စာရင်သပဌုစုထာသသည်။ သို့မဟုတ် သီသခဌာသဖိုင်တစ်ခုအကဌောင်သ အချက်အလက်ကို သင်ရနိုင်သည်-

# lsof /var/run/bcron-spool
COMMAND   PID   USER  FD  TYPE  DEVICE              SIZE/OFF  NODE    NAME
unixserve 20629 cron  3u  unix  0x000000005ac4bd83  0t0       1466637 /var/run/bcron-spool type=STREAM

လုပ်ငန်သစဉ် 20629 သည် သက်တမ်သကဌာရဟည်သော ဆာဗာတစ်ခုဖဌစ်သောကဌောင့် ၎င်သကို သင် ပူသတလဲလုပ်ဆောင်နိုင်ပါသည်။ သပိတ်မဟောက် တစ်ခုခုကို အသုံသပဌု strace -o /tmp/trace -p 20629. သင်သည် အခဌာသ terminal တလင် cron အလုပ်တစ်ခုကို တည်သဖဌတ်ပါက၊ အမဟာသတစ်ခုနဟင့်အတူ trace output ကို လက်ခံရရဟိမည်ဖဌစ်သည်။ ပဌီသတော့ ဒါက ရလဒ်ပါ။

accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21181
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21181, si_uid=998, si_status=0, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], WNOHANG|WSTOPPED, NULL) = 21181
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL)                   = 4
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21200
close(4)                                = 0
accept(3, NULL, NULL)                   = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=21200, si_uid=998, si_status=111, si_utime=0, si_stime=0} ---
wait4(0, [{WIFEXITED(s) && WEXITSTATUS(s) == 111}], WNOHANG|WSTOPPED, NULL) = 21200
wait4(0, 0x7ffe6bc36764, WNOHANG|WSTOPPED, NULL) = -1 ECHILD (No child processes)
rt_sigaction(SIGCHLD, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, {sa_handler=0x55d244bdb690, sa_mask=[CHLD], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7faa47ab9840}, 8) = 0
rt_sigreturn({mask=[]})                 = 43
accept(3, NULL, NULL

(နောက်ဆုံသ လက်ခံ () ခဌေရာခံသည့်အခါ ပဌီသမဌောက်မည်မဟုတ်ပါ။) ထပ်မံ၍ ကံမကောင်သစလာဖဌင့်၊ ကရလဒ်တလင် ကျလန်ုပ်တို့ရဟာဖလေနေသော အမဟာသမပါဝင်ပါ။ socket မဟ bcrontag ထံပေသပို့ခဌင်သ သို့မဟုတ် လက်ခံသည့် မည်သည့်မက်ဆေ့ချ်ကိုမဟ ကျလန်ုပ်တို့မတလေ့ပါ။ ယင်သအစာသ၊ ပဌီသပဌည့်စုံသော လုပ်ငန်သစဉ်ထိန်သချုပ်မဟု (ကိုယ်ပလာသ, စောင့်ပါ ၄, SIGCHLD စသည်ဖဌင့်) ကလုပ်ငန်သစဉ်သည် သင်ထင်မဌင်ယူဆထာသသည့်အတိုင်သ အမဟန်တကယ်အလုပ်ဖဌစ်မည့် ကလေသလုပ်ငန်သစဉ်ကို မလေသဖလာသပေသပါသည်။ သူမ၏လမ်သကဌောင်သကို ဖမ်သရန် လိုအပ်ပါက ခေါ်ဆိုမဟုတလင် ထည့်ပါ။ ခဌေရာ-f. ရလဒ်အသစ်တလင် အမဟာသအယလင်သ မက်ဆေ့ချ်ကို ရဟာဖလေသောအခါ ကအရာသည် ကျလန်ုပ်တို့ တလေ့ရဟိမည်ဖဌစ်သည်။ -f -o /tmp/trace -p 20629:

21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

ကဲ ဒါပဲနော်။ လမ်သကဌောင်သတလင် ဖိုင်တစ်ခုဖန်တီသရန် ကဌိုသစာသသောအခါ လုပ်ငန်သစဉ် 21470 သည် "ဝင်ရောက်ခလင့် ငဌင်သဆိုထာသသည်" အမဟာသတစ်ခု လက်ခံရရဟိသည် tmp/spool.21470.1573692319.854640 (လက်ရဟိ လုပ်ဆောင်နေသော လမ်သညလဟန်နဟင့် သက်ဆိုင်သည်)။ အကယ်၍ ကျလန်ုပ်တို့သည် လက်ရဟိ လုပ်ဆောင်နေသော လမ်သညလဟန်ကို သိပါက၊ ကျလန်ုပ်တို့သည် လမ်သကဌောင်သ အပဌည့်အစုံကို သိရဟိပဌီသ လုပ်ငန်သစဉ်သည် ၎င်သတလင် ၎င်သ၏ ယာယီဖိုင်ကို ဘာကဌောင့် မဖန်တီသနိုင်သည်ကို အဖဌေရဟာနိုင်မည်ဖဌစ်သည်။ ကံမကောင်သစလာပဲ၊ လုပ်ငန်သစဉ်က ထလက်ပဌီသသာသဖဌစ်လို့ သင်သုံသလို့မရပါဘူသ။ lsof -p 21470 လက်ရဟိလမ်သညလဟန်ကိုရဟာဖလေရန်၊ သို့သော် သင်သည် ဆန့်ကျင်ဘက်ညသတည်ချက်တလင် အလုပ်လုပ်နိုင်သည် - လမ်သညလဟန်ကိုပဌောင်သလဲသည့် PID 21470 စနစ်ခေါ်ဆိုမဟုမျာသကို ရဟာဖလေပါ။ (မည်သူမျဟမရဟိပါက၊ PID 21470 သည် ၎င်သတို့ကို ၎င်သ၏မိဘထံမဟ အမလေဆက်ခံထာသရမည်ဖဌစ်ပဌီသ၊ ၎င်သသည် ဖဌတ်သန်သနေပဌီဖဌစ်သည်။ lsof -p ရဟာမတလေ့ပါ။) ကစနစ်ခေါ်ဆိုမဟုမဟာ chdir (ခေတ်မီအလန်လိုင်သရဟာဖလေရေသအင်ဂျင်မျာသ၏အကူအညီဖဌင့်ရဟာဖလေရန်လလယ်ကူသည်)။ ကသည်မဟာ ဆာဗာ PID 20629 သို့သလာသရာလမ်သတစ်လျဟောက် ခဌေရာခံရလဒ်မျာသကို အခဌေခံ၍ ပဌောင်သပဌန်ရဟာဖလေမဟုမျာသ၏ ရလဒ်ဖဌစ်သည်။

20629 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7faa47c44810) = 21470
...
21470 execve("/usr/sbin/bcron-spool", ["bcron-spool"], 0x55d2460807e0 /* 27 vars */) = 0
...
21470 chdir("/var/spool/cron")          = 0
...
21470 openat(AT_FDCWD, "tmp/spool.21470.1573692319.854640", O_RDWR|O_CREAT|O_EXCL, 0600) = -1 EACCES (Permission denied) 
21470 write(1, "32:ZCould not create temporary f"..., 36) = 36
21470 write(2, "bcron-spool[21470]: Fatal: logs:"..., 84) = 84
21470 unlink("tmp/spool.21470.1573692319.854640") = -1 ENOENT (No such file or directory)
21470 exit_group(111)                   = ?
21470 +++ exited with 111 +++

(ပျောက်ဆုံသသလာသပါက ကျလန်ုပ်၏ ယခင်ပို့စ်ကို ဖတ်ကဌည့်စေလိုပါသည်။ * nix လုပ်ငန်သစဉ်စီမံခန့်ခလဲမဟုနဟင့် shells မျာသအကဌောင်သ.) ထို့ကဌောင့်၊ ဆာဗာ PID 20629 သည် လမ်သကဌောင်သတလင် ဖိုင်တစ်ခုဖန်တီသရန် ခလင့်ပဌုချက်မရရဟိခဲ့ပါ။ /var/spool/cron/tmp/spool.21470.1573692319.854640. ဖဌစ်နိုင်သည်မဟာ၊ ကအရာအတလက် အကဌောင်သရင်သမဟာ ဂန္ထဝင် ဖိုင်စနစ် ခလင့်ပဌုချက် ဆက်တင်မျာသ ဖဌစ်သည်။ စစ်ဆေသကဌည့်ရအောင်-

# ls -ld /var/spool/cron/tmp/
drwxr-xr-x 2 root root 4096 Nov  6 05:33 /var/spool/cron/tmp/
# ps u -p 20629
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
cron     20629  0.0  0.0   2276   752 ?        Ss   Nov14   0:00 unixserver -U /var/run/bcron-spool -- bcron-spool

အဲ့ဒီမဟာ ခလေသကို သင်္ဂဌိုဟ်တယ်။ ဆာဗာသည် အသုံသပဌုသူ cron တစ်ခုအနေဖဌင့် လုပ်ဆောင်သော်လည်သ root သာလျဟင် လမ်သညလဟန်သို့ရေသရန် ခလင့်ပဌုချက်ရဟိသည်။ /var/spool/cron/tmp/. ရိုသရဟင်သသောအမိန့် chown cron /var/spool/cron/tmp/ အတင်သလုပ်မယ်။ bcron မဟန်ကန်စလာလုပ်ဆောင်ပါ။ (ဒါက ပဌဿနာမဟုတ်ရင် နောက်ဖဌစ်နိုင်ခဌေအရဟိဆုံသသံသယက SELinux သို့မဟုတ် AppArmor လိုမျိုသ kernel လုံခဌုံရေသ module တစ်ခုပါ၊ ဒါကဌောင့် kernel message log ကို စစ်ဆေသကဌည့်စေချင်ပါတယ်။ dmesg.)

စုစုပေါင်သ

စနစ်ခေါ်ဆိုမဟုခဌေရာမျာသသည် အစပဌုသူအတလက် လလဟမ်သမိုသနိုင်သော်လည်သ ၎င်သတို့သည် ဘုံဖဌန့်ကျက်မဟုပဌဿနာမျာသကို အတန်သတစ်ခုလုံသတလင် အမဟာသရဟာရန် အမဌန်နည်သလမ်သဖဌစ်ကဌောင်သ ပဌသခဲ့သည်ဟု ကျလန်ုပ်မျဟော်လင့်ပါသည်။ Multiprocess တစ်ခုကို အမဟာသရဟာရန် ကဌိုသစာသနေသည်ဟု မဌင်ယောင်ကဌည့်ပါ။ bcronအဆင့်ဆင့် အမဟာသရဟာကိရိယာကို အသုံသပဌုခဌင်သ။

စနစ်ခေါ်ဆိုမဟုကလင်သဆက်တစ်လျဟောက် နောက်ပဌန်ခဌေရာကောက်ခဌင်သရလဒ်မျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သမဟာ ကျလမ်သကျင်မဟုလိုအပ်သော်လည်သ ကျလန်တော်ပဌောခဲ့သည့်အတိုင်သ၊ အမဌဲတမ်သနီသပါသ အသုံသပဌုနေပါသည်။ သပိတ်မဟောက်သဲလလန်စရလဒ်ကိုရရုံနဲ့ အဆုံသကနေစပဌီသ အမဟာသအယလင်သတလေကို ရဟာကဌည့်လိုက်တယ်။ ဘာပဲဖဌစ်ဖဌစ်၊ သပိတ်မဟောက် အမဟာသရဟာပဌင်ရာတလင် အချိန်မျာသစလာ သက်သာစေသည်။ သင့်အတလက်လည်သ အသုံသဝင်မယ်လို့ မျဟော်လင့်ပါတယ်။

source: www.habr.com

မဟတ်ချက် Add