áá»áœááºá¯ááºááá áºáá±á·áá¬á¡áá¯ááºááŸá¬ áá±á¬á·ááºáá²ááŒáá·áºáá»ááºááŒááºážá¡áá»á¬ážá á¯ááŒá áºááŒá®áž ááá¯ááá¯áááºááŸá¬ áá±ážááœááºážáá»á¬ážááá¯ááŒá±ááá¯áááºááŒáá¯ážá á¬ážáá¬ááœáẠá¡áá»áááºáá»á¬ážá áœá¬ááŒá¯ááºážáá±áá«áááºá
- á€áá±á¬á·ááºáá²ááẠáá±á¬á·ááºáá²áá±ážáá¬ážáá°á¡ááœáẠá¡áá¯ááºáá¯ááºáá±á¬áºáááºáž áá»áœááºá¯ááºá¡ááœááºááá¯ááºáá«á á¡áááºááŒá±á¬ááºá·?
- ááá±á·á áá®áá±á¬á·ááºáá²á áá»áœááºáá±á¬á·áºá¡ááœáẠá¡áá¯ááºááŒá áºáá±áá²á· áá®áá±á·áá±á¬á· áááŒá áºáá«áá°ážá á¡áááºááŒá±á¬ááºá·?
áááºážááẠáá¯á¶ááŸááºáá±á¬á·ááºáá² á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááŸáá·áº á¡áááºážáááºááœá¬ááŒá¬ážááá·áº á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážáá áºáá»áá¯ážááŒá áºáááºá áá¯á¶ááŸáẠá¡ááŸá¬ážááŸá¬ááŒááºááŒááºážááẠáá¯ááºá áá¯áá¹áááá±áááŸáá·áº áááºáááºáá±á¬áºáááºáž á¡áá¯á¶ážáá»ááŸá¯ á¡ááŸá¬ážááŸá¬ááŒááºážááẠáá¯ááºááŸáá·áº áááºáááºážáá»ááºááŒá¬áž á¡ááŒááºá¡ááŸáẠáááºááœááºááŸá¯á¡ááŒá±á¬ááºáž ááŒá áºáááºá ááŒá¿áá¬áá¡áááºážáá¶ááẠáá¯áá¹ááá¡ááŸá¬ážáá áºáá¯ááŒá áºáá±áá»áŸááºáááºá á¡áá¬á¡á¬ážáá¯á¶ážááẠá ááºáá áºáá¯á¶ážáá±á«áºááœááºááá¯ááºáá² á¡ááŒá¬ážáá áºáá¯áá±á«áºááœááºáᬠá¡áá¯ááºáá¯ááºáááºáá°áá±á¬á¡áá»ááºááŸá¬ ááŒá¿áá¬ááẠáááºáááºážáá»ááºááœáẠáá áºáááºážáááºážááŒáá·áº ááŸááá±áááºáᯠááá¯ááá¯áááºá
áá«ááŒá±á¬áá·áº áá¯á¶ááŸáẠdebugging tools ááœá±á¡á á¬áž ááŒáá¯ááºáá«áááºá gdb áá»áœááºá¯ááºááœáẠá¡ááŸá¬ážááŸá¬ááŒááºáááºááŒááºážá¡ááœáẠááá°áá®áá±á¬áááááá¬á¡á á¯á¶ááŸááá«áááºá ááŒá®ážáá±á¬á· "áá®áá±á¬á·ááºáá²ááºá áá«á·á¡ááœáẠáá¬ááŒá±á¬áá·áº á¡áá¯ááºáááŒá áºáá¬áá²" áá²á·ááá¯á·áá±á¬ ááŒá¿áá¬ááᯠááá¯ááºááœááºááŒá±ááŸááºážááẠá¡ááŒáá¯ááºáá¯á¶ážáááááá¬á áá±á«áºáááºá áááááºááŸá±á¬ááº.
áá±á¬ááºááŒá±á¬ááºážááá¯áá¬áá¬áá²á
á¡ááŒá±áᶠ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 áá»á¬áž ááá¯á·ááá¯áẠá¡ááŒá¬ážá¡áá¬áá»á¬ážááᯠáá¯ááºáá±á¬ááºááẠáá¡á±á¬ááºááŒááºáá±á¬ ááŒáá¯ážáááºážááŸá¯áá»á¬ážá¡ááŒá±á¬ááºáž ááá±ááá¬áá±á¬ áááºáá±á·áá»áºáá»á¬ážááᯠáá¯ááºááœáŸááºááá¯ááºáááº... ááá¬ážá
áá¬áá±á¬ááºážáá±á¬áºáááºáž áá¡á±á¬ááºááŒááºáá«á áááºááŸááºá
á
áºáá±ážááŒááºážá¡ááŸá¬ážáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡ááá·áºááŒáá·áºááŒá¿áá¬áá»á¬ážááŸáá·áº áá±á¬ááºážá
áœá¬áá±á«ááºážá
ááºáá«á á¡áá»á¬ážá¡á¬ážááŒáá·áº áááºážááẠáá±á«ááºážá
ááºááŸá¯áá
áºáᯠááá¯á¡ááºáááºá áááááºááŸá±á¬ááºáá
áºáá«áá
áºáá¶
á¥ááá¬áá áºáá¯á¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠáá®ážááŒá¬ážáá¬áá¬ááᯠá¡áá¯á¶ážááŒá¯áááºááŒá áºáá±á¬áºáááºáž á áá áºáá±á«áºááá¯ááŸá¯ááŒá±áá¬áá¶ááŒááºážááᯠááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬á¡áá¯á¶ážáá»ááááºáá±á¬ááºážáá»á¬ážááœáẠáááŒá¬áááá¯ááºáá±á¬ááºááá¯ááºáá«áááºá ááŸááºáááºáá±á¬áááááá¬áá»á¬ážááᯠááœá±ážáá»ááºáááºáᬠááá¯á¡ááºáááºá
ááá¯ážááŸááºážáá±á¬á¡ááŸá¬ážááŒááºáááºááŒááºážá¥ááá¬
áááºááẠá¡á¶á·ááŒááœááºáá±á¬ááºážáá±á¬ áá¬áá¬á¡ááºááºáá®áá±ážááŸááºáž 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 ááœáẠáááºááá¯á·áá¯ááºáá±á¬ááºááááºááᯠá¡áááºážáá¯á¶ážá¡áááºážáááºáá¬ážáááºáá«áá á
áá
áºáá±á«áºááá¯ááŸá¯ááŒá±áá¬áá¶ááŒááºážáááááºáá»á¬ážááᯠáá¬ážáááºááẠááá¯ááá¯ááœááºáá°áááºááŒá
áºáááºá á¥ááá¬á¡á¬ážááŒáá·áºá áááºááẠááœááºáááºá
áá
áºáá»á¬ážááá¯á· áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡ááŸá¬ážááŸá¬ááŒááºáá¬ááœáẠááŒá¿áá¬ááŸááá±áááºá áá°áá®áá±á¬ááá¹ááááºááá¯ááŒáá·áºáá«á
ááá¯ááá¯ááŸá¯ááºááœá±ážáá±á¬ á¡ááŸá¬ážááŸá¬ááŒááºááŒááºáž á¥ááá¬
ááá¯ážááŸááºážáá±á¬ á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážáááá°áá¬ááẠá¡áá¯ááºáá¯ááºááá¯ááºáá¬ááœáẠá¡áá»á¬ážá¡á¬ážááŒáá·áº ááá¯ááºááœááºááŒá±ááŸááºážáááá·áº á¥ááá¬áá áºáá¯ááŒá áºááŒá±á¬ááºáž áá»áœááºá¯ááºááŒá±á¬áá²á·ááŒá®ážááŒá áºáááºá áááááºááŸá±á¬ááº. ááá¯á·áá±á¬áºá áá áºáá«áá áºáá¶ááœáẠá¡ááŸááºáááẠá á¯á¶á ááºážá á áºáá±ážááẠááá¯á¡ááºáááºá ááá¯á·ááŒá±á¬áá·áº ááá¯ááá¯á¡ááá·áºááŒáá·áºááá·áº á¡ááŸá¬ážááŸá¬ááŒááºááŒááºážá áááºááœá±á·áá á¥ááá¬áá áºáá¯ááŒá áºáááºá
# 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 +++
(áá»á±á¬ááºáá¯á¶ážááœá¬ážáá«á áá»áœááºá¯ááºá ááááºááá¯á·á
áºááᯠáááºááŒáá·áºá
á±ááá¯áá«áááºá
# 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