เชธเซเชŸเซเชฐเซ‡เชธ เชธเชพเชฅเซ‡ เชกเซ€เชฌเช—เซ€เช‚เช— เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชœเชฎเชพเชตเชŸ

เชธเซเชŸเซเชฐเซ‡เชธ เชธเชพเชฅเซ‡ เชกเซ€เชฌเช—เซ€เช‚เช— เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชœเชฎเชพเชตเชŸ

เชฎเชพเชฐเซ€ เชฆเชฟเชตเชธเชจเซ€ เชจเซ‹เช•เชฐเซ€ เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐ เชœเชฎเชพเชตเชŸ เช›เซ‡, เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชนเซเช‚ เชชเซเชฐเชถเซเชจเซ‹เชจเชพ เชœเชตเชพเชฌ เช†เชชเชตเชพ เชฎเชพเชŸเซ‡ เช˜เชฃเซ‹ เชธเชฎเชฏ เชชเชธเชพเชฐ เช•เชฐเซเช‚ เช›เซเช‚ เชœเซ‡เชฎ เช•เซ‡:

  • เช† เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชจเชนเซ€เช‚. เชถเชพ เชฎเชพเชŸเซ‡?
  • เช—เชˆเช•เชพเชฒเซ‡ เช† เชธเซ‰เชซเซเชŸเชตเซ‡เชฐ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เช†เชœเซ‡ เชคเซ‡ เชจเชฅเซ€ เช•เชฐเชคเซเช‚. เชถเชพ เชฎเชพเชŸเซ‡?

เช† เชเช• เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชกเซ€เชฌเช—เซ€เช‚เช— เช›เซ‡ เชœเซ‡ เชจเชฟเชฏเชฎเชฟเชค เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชกเซ€เชฌเช—เซ€เช‚เช— เช•เชฐเชคเชพ เชฅเซ‹เชกเซเช‚ เช…เชฒเช— เช›เซ‡. เชจเชฟเชฏเชฎเชฟเชค เชกเชฟเชฌเช—เซ€เช‚เช— เช เช•เซ‹เชกเชจเชพ เชคเชฐเซเช• เชตเชฟเชถเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชกเซ€เชฌเช—เซ€เช‚เช— เช เช•เซ‹เชก เช…เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชตเชšเซเชšเซ‡เชจเซ€ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชตเชฟเชถเซ‡ เช›เซ‡. เชœเซ‹ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชฎเซ‚เชณ เชคเชพเชฐเซเช•เชฟเช• เชญเซ‚เชฒ เชนเซ‹เชฏ เชคเซ‹ เชชเชฃ, เชนเช•เซ€เช•เชค เช เช›เซ‡ เช•เซ‡ เชฌเชงเซเช‚ เชเช• เชฎเชถเซ€เชจ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชฌเซ€เชœเชพ เชชเชฐ เชจเชนเซ€เช‚ เชคเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชธเชฎเชธเซเชฏเชพ เช•เซ‹เชˆเช• เชฐเซ€เชคเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃเชฎเชพเช‚ เช›เซ‡.

เชคเซ‡เชฅเซ€ เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชกเชฟเชฌเช—เซ€เช‚เช— เชธเชพเชงเชจเซ‹ เชœเซ‡เชตเชพ เชœเซ€เชกเซ€เชฌเซ€ เชกเชฟเชฌเช—เซ€เช‚เช— เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชŸเซ‚เชฒเซเชธเชจเซ‹ เชเช• เช…เชฒเช— เชธเซ‡เชŸ เช›เซ‡. เช…เชจเซ‡ "เช† เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช•เซ‡เชฎ เช•เชพเชฎ เช•เชฐเชคเซเช‚ เชจเชฅเซ€?" เชœเซ‡เชตเซ€ เชธเชฎเชธเซเชฏเชพเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชฎเชพเชฐเซเช‚ เชชเซเชฐเชฟเชฏ เชธเชพเชงเชจ. เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ เชธเซเชŸเซเชฐเซ‡เชธ.

เชธเซเชŸเซเชฐเซ‡เชธ เชถเซเช‚ เช›เซ‡?

เชธเซเชŸเซเชฐเซ‡เชธ "เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒ เชŸเซเชฐเซ‡เชธเซ€เช‚เช—" เชฎเชพเชŸเซ‡เชจเซเช‚ เชเช• เชธเชพเชงเชจ เช›เซ‡. เชคเซ‡ เชฎเซ‚เชณ เชฐเซ‚เชชเซ‡ Linux เชฎเชพเชŸเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชธเชฎเชพเชจ เชกเชฟเชฌเช—เซ€เช‚เช— เชฏเซเช•เซเชคเชฟเช“ เช…เชจเซเชฏ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฎเชพเชŸเซ‡ เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ (เชกเซ€เชŸเซเชฐเซ‡เชธ เช…เชฅเชตเชพ ktrace).

เชฎเซ‚เชณเชญเซ‚เชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เช•เซ‹เชˆเชชเชฃ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เชšเชฒเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡ เชคเชฎเชพเชฎ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชจเซ‡ เชกเชฎเซเชช เช•เชฐเชถเซ‡ (เชœเซ‹เช•เซ‡ เชชเชนเซ‡เชฒเชพ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซ‡ เชœเชพเชคเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเซเช‚ เชชเชกเชถเซ‡. เชธเซเชŸเซเชฐเซ‡เชธ):

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

เช† เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒเซเชธ เชถเซเช‚ เช›เซ‡? เช† เช“เชชเชฐเซ‡เชŸเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎ เช•เชฐเซเชจเชฒ เชฎเชพเชŸเซ‡ API เชœเซ‡เชตเซเช‚ เช•เช‚เชˆเช• เช›เซ‡. เชเช• เชธเชฎเชฏเซ‡, เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเซ‡ เชคเซ‡ เชœเซ‡ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชชเชฐ เชšเชพเชฒเชคเซเช‚ เชนเชคเซเช‚ เชคเซ‡เชจเซ€ เชธเซ€เชงเซ€ เชเช•เซเชธเซ‡เชธ เชนเชคเซ€. เชœเซ‹, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเซ‡เชจเซ‡ เชธเซเช•เซเชฐเซ€เชจ เชชเชฐ เช•เช‚เชˆเช• เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซ‹ เชคเซ‡ เชตเชฟเชกเชฟเช“ เช‰เชชเช•เชฐเชฃเซ‹ เชฎเชพเชŸเซ‡ เชชเซ‹เชฐเซเชŸ เช…เชฅเชตเชพ เชฎเซ‡เชฎเชฐเซ€-เชฎเซ‡เชช เช•เชฐเซ‡เชฒ เชฐเชœเชฟเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เชตเช—เชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชฎเชฒเซเชŸเซ€เชŸเชพเชธเซเช•เซ€เช‚เช— เช•เซ‹เชฎเซเชชเซเชฏเซเชŸเชฐ เชธเชฟเชธเซเชŸเชฎเซ‹ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เชฌเชจเซ€, เชคเซเชฏเชพเชฐเซ‡ เชตเชฟเชตเชฟเชง เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชชเชฐ เชฒเชกเชตเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช…เชฐเชพเชœเช•เชคเชพเชจเซเช‚ เชถเชพเชธเชจ เชฅเชฏเซเช‚. เชเช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชฎเชพเช‚ เชญเซ‚เชฒเซ‹ เช…เชจเซเชฏเชจเซ‡ เชจเซ€เชšเซ‡ เชฒเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡, เชœเซ‹ เชธเชฎเช—เซเชฐ เชธเชฟเชธเซเชŸเชฎ เชจเชนเซ€เช‚. เชชเช›เซ€ CPU เชฎเชพเช‚ เชตเชฟเชถเซ‡เชทเชพเชงเชฟเช•เชพเชฐ เชฎเซ‹เชกเซเชธ (เช…เชฅเชตเชพ "เชฐเชฟเช‚เช— เชชเซเชฐเซ‹เชŸเซ‡เช•เซเชถเชจ") เชฆเซ‡เช–เชพเชฏเชพ. เช•เชฐเซเชจเชฒ เชธเซŒเชฅเซ€ เชตเชงเซ เชตเชฟเชถเซ‡เชทเชพเชงเชฟเช•เซƒเชค เชฌเชจเซเชฏเซเช‚: เชคเซ‡เชจเซ‡ เชนเชพเชฐเซเชกเชตเซ‡เชฐเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชเช•เซเชธเซ‡เชธ เชชเซเชฐเชพเชชเซเชค เชฅเชˆ, เช“เช›เซ€ เชตเชฟเชถเซ‡เชทเชพเชงเชฟเช•เซƒเชค เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซ‹ เชชเซ‡เชฆเชพ เช•เชฐเซ‡ เช›เซ‡ เชœเซ‡เชจเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒเซเชธ เชฆเซเชตเชพเชฐเชพ เชนเชพเชฐเซเชกเชตเซ‡เชฐ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เชฐเซเชจเชฒ เชชเชพเชธเซ‡เชฅเซ€ เชเช•เซเชธเซ‡เชธเชจเซ€ เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเชตเชพเชจเซ€ เชนเชคเซ€.

เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชธเซเชคเชฐเซ‡, เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชธเชพเชฎเชพเชจเซเชฏ เชซเช‚เช•เซเชถเชจ เช•เซ‰เชฒ เช•เชฐเชคเชพเช‚ เชฅเซ‹เชกเซ‹ เช…เชฒเช— เชนเซ‹เชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซ‹เชŸเชพเชญเชพเช—เชจเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชฎเชพเช‚ เชฐเซ‡เชชเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡. POSIX C เชธเซเชŸเชพเชจเซเชกเชฐเซเชก เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เชฎเชพเช‚ เชซเช‚เช•เซเชถเชจ เช•เซ‰เชฒ เช›เซ‡ เชฒเช–เซ‹ (), เชœเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชฎเชพเชŸเซ‡ เชคเชฎเชพเชฎ เช†เชฐเซเช•เชฟเชŸเซ‡เช•เซเชšเชฐ-เชตเชฟเชถเชฟเชทเซเชŸ เช•เซ‹เชก เชงเชฐเชพเชตเซ‡ เช›เซ‡ เชฒเช–เซ€.

เชธเซเชŸเซเชฐเซ‡เชธ เชธเชพเชฅเซ‡ เชกเซ€เชฌเช—เซ€เช‚เช— เชธเซ‹เชซเซเชŸเชตเซ‡เชฐ เชœเชฎเชพเชตเชŸ

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช…เชจเซ‡ เชคเซ‡เชจเชพ เชชเชฐเซเชฏเชพเชตเชฐเชฃ (เช•เชฎเซเชชเซเชฏเซเชŸเชฐ เชธเชฟเชธเซเชŸเชฎเซเชธ) เชตเชšเซเชšเซ‡เชจเซ€ เช•เซ‹เชˆเชชเชฃ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒเซเชธ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชคเซ‡เชฅเซ€, เชœเซเชฏเชพเชฐเซ‡ เชธเซ‰เชซเซเชŸเชตเซ‡เชฐ เชเช• เชฎเชถเซ€เชจ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡ เชชเชฐเช‚เชคเซ เชฌเซ€เชœเชพ เชชเชฐ เชจเชนเซ€เช‚, เชคเซเชฏเชพเชฐเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชŸเซเชฐเซ‡เชธเชฟเช‚เช— เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชœเซ‹เชตเชพเชจเซเช‚ เชธเชพเชฐเซเช‚ เชฐเชนเซ‡เชถเซ‡. เชตเชงเซ เชตเชฟเชถเชฟเชทเซเชŸ เชฐเซ€เชคเซ‡, เช…เชนเซ€เช‚ เชฒเชพเช•เซเชทเชฃเชฟเช• เชฌเชฟเช‚เชฆเซเช“เชจเซ€ เชธเซ‚เชšเชฟ เช›เซ‡ เชœเซ‡เชจเซเช‚ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชŸเซเชฐเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  • เช•เชจเซเชธเซ‹เชฒ I/O
  • เชจเซ‡เชŸเชตเชฐเซเช• I/O
  • เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ เชเช•เซเชธเซ‡เชธ เช…เชจเซ‡ เชซเชพเช‡เชฒ I/O
  • เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฅเซเชฐเซ‡เชกเชจเชพ เชœเซ€เชตเชจเช•เชพเชณเชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ
  • เชฒเซ‹-เชฒเซ‡เชตเชฒ เชฎเซ‡เชฎเชฐเซ€ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ
  • เชšเซ‹เช•เซเช•เชธ เช‰เชชเช•เชฐเชฃ เชกเซเชฐเชพเช‡เชตเชฐเซ‹เชจเซ€ เชเช•เซเชธเซ‡เชธ

เชธเซเชŸเซเชฐเซ‡เชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เซเชฏเชพเชฐเซ‡ เช•เชฐเชตเซ‹?

เชธเชฟเชฆเซเชงเชพเช‚เชค เชฎเชพเช‚, เชธเซเชŸเซเชฐเซ‡เชธ เชฏเซเชเชฐ เชธเซเชชเซ‡เชธเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชธเชพเชฅเซ‡ เช‰เชชเชฏเซ‹เช— เชฅเชพเชฏ เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชฏเซเชเชฐ เชธเซเชชเซ‡เชธเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒ เช•เชฐเชตเชพ เชœ เชœเซ‹เชˆเช. เชคเซ‡ เชธเช‚เช•เชฒเชฟเชค, เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเชพ เช•เชพเชฐเซเชฏเช•เซเชฐเชฎเซ‹ เชธเชพเชฅเซ‡ เชตเชงเซ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเชฎเซ‡ เชฐเชจเชŸเชพเชˆเชฎ เช…เชจเซ‡ เชฆเซเชญเชพเชทเชฟเชฏเชพเชจเชพ เชตเชงเชพเชฐเชพเชจเชพ เช…เชตเชพเชœเชจเซ‡ เช•เชพเชชเซ€ เชถเช•เซ‹ เชคเซ‹ เชคเซ‡ เชชเชพเชฏเชฅเซ‹เชจ เชœเซ‡เชตเซ€ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชญเชพเชทเชพเช“ เชธเชพเชฅเซ‡ เชชเชฃ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡.

เชคเซ‡เชจเชพ เชคเชฎเชพเชฎ เชฎเชนเชฟเชฎเชพเชฎเชพเช‚ เชธเซเชŸเซเชฐเซ‡เชธ เชเช• เชฎเชถเซ€เชจ เชชเชฐ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชคเชพ เชธเซ‹เชซเซเชŸเชตเซ‡เชฐเชจเชพ เชกเซ€เชฌเช—เซ€เช‚เช— เชฆเชฐเชฎเชฟเชฏเชพเชจ เชชเซ‹เชคเชพเชจเซ‡ เชชเซเชฐเช—เชŸ เช•เชฐเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เช…เชšเชพเชจเช• เชฌเซ€เชœเชพ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเซ€ เชฆเซ‡ เช›เซ‡, เชซเชพเช‡เชฒเซ‹, เชชเชฐเชตเชพเชจเช—เซ€เช“ เชตเชฟเชถเซ‡ เช…เชธเซเชชเชทเซเชŸ เชธเช‚เชฆเซ‡เชถเชพเช“ เช‰เชคเซเชชเชจเซเชจ เช•เชฐเซ‡ เช›เซ‡, เช…เชฅเชตเชพ เช…เชฎเซเช• เช†เชฆเซ‡เชถเซ‹ เช…เชฅเชตเชพ เช…เชจเซเชฏ เช•เซ‹เชˆ เชตเชธเซเชคเซเชจเซ‡ เชšเชฒเชพเชตเชตเชพเชจเชพ เช…เชธเชซเชณ เชชเซเชฐเชฏเชพเชธเซ‹... เชคเซ‡ เช…เชซเชธเซ‹เชธเชจเซ€ เชตเชพเชค เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฅเชคเซเช‚ เชจเชฅเซ€. เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชšเช•เชพเชธเชฃเซ€ เชญเซ‚เชฒเซ‹ เชœเซ‡เชตเซ€ เช‰เชšเซเชš-เชธเซเชคเชฐเชจเซ€ เชธเชฎเชธเซเชฏเชพเช“ เชธเชพเชฅเซ‡ เช–เซ‚เชฌ เชธเชพเชฐเซ€ เชฐเซ€เชคเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡. เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เชฎเชพเชŸเซ‡ เชธเช‚เชฏเซ‹เชœเชจ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ เชธเซเชŸเซเชฐเซ‡เชธเช•เซเชฏเชพเชฐเซ‡เช• ltrace เช…เชจเซ‡ เช‰เชšเซเชš เชธเซเชคเชฐเชจเชพ เชธเชพเชงเชจเซ‹ (เชœเซ‡เชฎ เช•เซ‡ เช†เชฆเซ‡เชถ เชตเชพเช•เซเชฏ เชธเชพเชงเชจ openssl เชชเซเชฐเชฎเชพเชฃเชชเชคเซเชฐ เชกเซ€เชฌเช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡).

เช…เชฎเซ‡ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชธเซเชŸเซ‡เชจเซเชกเช…เชฒเซ‹เชจ เชธเชฐเซเชตเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชถเซเช‚, เชชเชฐเช‚เชคเซ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชŸเซเชฐเซ‡เชธเชฟเช‚เช— เช˜เชฃเซ€เชตเชพเชฐ เชตเชงเซ เชœเชŸเชฟเชฒ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชชเซเชฒเซ‡เชŸเชซเซ‹เชฐเซเชฎ เชชเชฐ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชคเชฎเชพเชฐเซ‡ เชซเช•เซเชค เชฏเซ‹เช—เซเชฏ เชธเชพเชงเชจเซ‹ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เชธเชฐเชณ เชกเซ€เชฌเช—เซ€เช‚เช— เช‰เชฆเชพเชนเชฐเชฃ

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เชคเชฎเซ‡ เช…เชฆเซเชญเซเชค เชธเชฐเซเชตเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ foo เชšเชฒเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹, เช…เชจเซ‡ เช† เชคเซ‡ เช›เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชคเชฎเซ‡ เชธเชฎเชพเชชเซเชค เชฅเชถเซ‹:

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

เชฆเซ‡เช–เซ€เชคเซ€ เชฐเซ€เชคเซ‡ เชคเซ‡ เชคเชฎเซ‡ เชฒเช–เซ‡เชฒเซ€ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชถเซ‹เชงเซ€ เชถเช•เซเชฏเซเช‚ เชจเชฅเซ€. เช†เชตเซเช‚ เชฅเชพเชฏ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชœเซเชฏเชพเชฐเซ‡ เชชเซ‡เช•เซ‡เชœ เชฎเซ‡เชจเซ‡เชœเชฐเซเชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เช“ เช…เชชเซ‡เช•เซเชทเชฟเชค เชซเชพเช‡เชฒ เชธเซเชฅเชพเชจเซ‹เชจเซ‡ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเซ‡ เช›เซ‡. เช…เชจเซ‡ เชœเซ‹ เชคเชฎเซ‡ เชเช• เชตเชฟเชคเชฐเชฃ เชฎเชพเชŸเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพเชจเซ‡ เช…เชจเซเชธเชฐเซ‹ เช›เซ‹, เชคเซ‹ เชฌเซ€เชœเชพเชฎเชพเช‚ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเซ€ เช…เชชเซ‡เช•เซเชทเชพ เชนเชคเซ€ เชคเซ‡ เช•เชฐเชคเชพเช‚ เชธเช‚เชชเซ‚เชฐเซเชฃเชชเชฃเซ‡ เช…เชฒเช— เชซเชพเช‡เชฒเซ‹ เชฎเชณเชถเซ‡. เชœเซ‹ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เช•เซเชฏเชพเช‚ เชถเซ‹เชงเชตเซ€ เชคเซ‡ เชœเชฃเชพเชตเซเชฏเซเช‚ เชนเซ‹เชฏ เชคเซ‹ เชธเชฎเชธเซเชฏเชพ เชฅเซ‹เชกเซ€ เชธเซ‡เช•เช‚เชกเชฎเชพเช‚ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชคเซ‡ เชฅเชคเซเช‚ เชจเชฅเซ€. เชคเซ‹ เช•เซเชฏเชพเช‚ เชœเซ‹เชตเซเช‚?

เชœเซ‹ เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชธเซเชฐเซ‹เชค เช•เซ‹เชกเชจเซ€ เชเช•เซเชธเซ‡เชธ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เชตเชพเช‚เชšเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชฌเชงเซเช‚ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹. เชธเชพเชฐเซ€ เชฌเซ‡เช•เช…เชช เชฏเซ‹เชœเชจเชพ, เชชเชฐเช‚เชคเซ เชธเซŒเชฅเซ€ เชเชกเชชเซ€ เช‰เช•เซ‡เชฒ เชจเชฅเซ€. เชคเชฎเซ‡ เชธเซเชŸเซ‡เชช-เชฌเชพเชฏ-เชธเซเชŸเซ‡เชช เชกเซ€เชฌเช—เชฐ เชœเซ‡เชตเชพ เช†เชถเชฐเซ‹ เชฒเชˆ เชถเช•เซ‹ เช›เซ‹ เชœเซ€เชกเซ€เชฌเซ€ เช…เชจเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชถเซเช‚ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡ เชœเซเช“, เชชเชฐเช‚เชคเซ เชคเซ‡ เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹ เชตเชงเซ เช…เชธเชฐเช•เชพเชฐเช• เช›เซ‡ เชœเซ‡ เช–เชพเชธ เช•เชฐเซ€เชจเซ‡ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชฌเชคเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฐเชšเชพเชฏเซ‡เชฒ เช›เซ‡: เชธเซเชŸเซเชฐเซ‡เชธ.

เชจเชฟเชทเซเช•เชฐเซเชท เชธเซเชŸเซเชฐเซ‡เชธ เชฌเชฟเชจเชœเชฐเซ‚เชฐเซ€ เชฒเชพเช—เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชธเชพเชฐเชพ เชธเชฎเชพเชšเชพเชฐ เช เช›เซ‡ เช•เซ‡ เชคเซ‡เชฎเชพเช‚เชจเชพ เชฎเซ‹เชŸเชพ เชญเชพเช—เชจเชพเชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชค เชฐเซ€เชคเซ‡ เช…เชตเช—เชฃเซ€ เชถเช•เชพเชฏ เช›เซ‡. เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เช…เชฒเช— เชซเชพเช‡เชฒเชฎเชพเช‚ เชธเชพเชšเชตเชตเชพ เชฎเชพเชŸเซ‡ -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, mprotect, เช•เซเชตเชฟเชฒ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชฎเซ‡เชฎเชฐเซ€ เชถเซ‹เชงเชตเชพ เช…เชจเซ‡ เชกเชพเชฏเชจเซ‡เชฎเชฟเช• เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€เช“ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชœเซ‡เชตเซ€ เชฌเชพเชฌเชคเซ‹ เชฎเชพเชŸเซ‡.) เช–เชฐเซ‡เช–เชฐ, เช†เช‰เชŸเชชเซเชŸ เชกเซ€เชฌเช—เซ€เช‚เช— เชฆเชฐเชฎเชฟเชฏเชพเชจ เชธเซเชŸเซเชฐเซ‡เชธ เช–เซ‚เชฌ เชœ เช…เช‚เชคเชฅเซ€ เชตเชพเช‚เชšเชตเซเช‚ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡. เชจเซ€เชšเซ‡ เชเช• เชชเชกเช•เชพเชฐ เชนเชถเซ‡ เชฒเช–เซ€, เชœเซ‡ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡. เช…เชฎเซ‡ เช‰เชชเชฐ เชœเซ‹เชˆเช เช›เซ€เช เช…เชจเซ‡ เชชเซเชฐเชฅเชฎ เชญเซ‚เชฒเชญเชฐเซ‡เชฒเซ€ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ - เช•เซ‰เชฒ เชœเซเช“ เช“เชชเชจเซ‡เชŸ, เชœเซ‡ เชญเซ‚เชฒ เชซเซ‡เช‚เช•เซ‡ เช›เซ‡ ENOENT ("เชซเชพเช‡เชฒ เช…เชฅเชตเชพ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€ เชฎเชณเซ€ เชจเชฅเซ€") เช–เซ‹เชฒเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡ /etc/foo/config.json. เช† เชคเซ‡ เช›เซ‡ เชœเซเชฏเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

เช† เชฎเชพเชคเซเชฐ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชนเซเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚ เชคเซ‡ เชธเชฎเชฏเชจเชพ 90% เชนเซเช‚ เช•เชนเซ€เชถ เชธเซเชŸเซเชฐเซ‡เชธ, เช†เชจเชพ เช•เชฐเชคเชพเช‚ เชตเชงเซ เชฎเซเชถเซเช•เซ‡เชฒ เช•เช‚เชˆ เชจเชฅเซ€. เชจเซ€เชšเซ‡ เชเช• เชธเช‚เชชเซ‚เชฐเซเชฃ เชชเช—เชฒเซเช‚-เชฆเชฐ-เชชเช—เชฒเชพเช‚ เชกเชฟเชฌเช—เซ€เช‚เช— เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ เช›เซ‡:

  • เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฎเชพเช‚เชฅเซ€ เชธเชฟเชธเซเชŸเชฎ-เชตเชพเชฏ เชญเซ‚เชฒ เชตเชฟเชถเซ‡ เช…เชธเซเชชเชทเซเชŸ เชธเช‚เชฆเซ‡เชถเชพเชจเซ‡ เช•เชพเชฐเชฃเซ‡ เช…เชธเซเชตเชธเซเชฅ เชฅเชพเช“
  • เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เชชเซเชจเชƒเชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ‹ เชธเซเชŸเซเชฐเซ‡เชธ
  • เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ เชถเซ‹เชงเซ‹
  • เชœเซเชฏเชพเช‚ เชธเซเชงเซ€ เชคเชฎเซ‡ เชชเซเชฐเชฅเชฎ เชจเชฟเชทเซเชซเชณ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเชจเซ‡ เชนเชฟเชŸ เชจ เช•เชฐเซ‹ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€ เช‰เชชเชฐ เชœเชพเช“

เชคเซ‡ เช–เซ‚เชฌ เชœ เชธเช‚เชญเชต เช›เซ‡ เช•เซ‡ เชชเช—เชฒเซเช‚ 4 เชฎเชพเช‚ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชถเซเช‚ เช–เซ‹เชŸเซเช‚ เชฅเชฏเซเช‚ เชคเซ‡ เชœเชพเชนเซ‡เชฐ เช•เชฐเชถเซ‡.

เชธเช‚เช•เซ‡เชคเซ‹

เชคเชฎเชจเซ‡ เชตเชงเซ เชœเชŸเชฟเชฒ เชกเชฟเชฌเช—เซ€เช‚เช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เชฌเชคเชพเชตเชคเชพ เชชเชนเซ‡เชฒเชพ, เชนเซเช‚ เชคเชฎเชจเซ‡ เช…เชธเชฐเช•เชพเชฐเช• เช‰เชชเชฏเซ‹เช— เชฎเชพเชŸเซ‡ เชฅเซ‹เชกเซ€ เชฏเซเช•เซเชคเชฟเช“ เชฌเชคเชพเชตเซ€เชถ เชธเซเชŸเซเชฐเซ‡เชธ:

เชฎเชพเชฃเชธ เชคเชฎเชพเชฐเซ‹ เชฎเชฟเชคเซเชฐ เช›เซ‡

เช˜เชฃเซ€ *nix เชธเชฟเชธเซเชŸเชฎเซ‹ เชชเชฐ, เช•เชฐเซเชจเชฒ เชชเชฐ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชจเซ€ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซ‚เชšเชฟ เชšเชพเชฒเซ€เชจเซ‡ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชฎเชพเชฃเชธ syscalls. เชคเชฎเซ‡ เชœเซ‡เชตเซ€ เชตเชธเซเชคเซเช“ เชœเซ‹เชถเซ‹ brk(2), เชœเซ‡เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ เชตเชงเซ เชฎเชพเชนเชฟเชคเซ€ เชšเชฒเชพเชตเซ€เชจเซ‡ เชฎเซ‡เชณเชตเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชฎเชพเชฃเชธ 2 brk.

เชจเชพเชจเซ€ เชฐเซ‡เช•: เชฎเชพเชฃเชธ 2 เช•เชพเช‚เชŸเซ‹ เชฎเชจเซ‡ เชถเซ‡เชฒ เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซƒเชทเซเช  เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เชพเช‚เชŸเซ‹ () ะฒ GNU libc, เชœเซ‡, เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡, เช•เซ‰เชฒ เชฆเซเชตเชพเชฐเชพ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เช•เซเชฒเซ‹เชจ(). เชธเชฟเชฎเซ‡เชจเซเชŸเชฟเช•เซเชธเชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‹ เช•เชพเช‚เชŸเซ‹ เชœเซ‹ เชคเชฎเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเช–เซ‹ เชคเซ‹ เชคเซ‡ เชœ เชฐเชนเซ‡ เช›เซ‡ เช•เชพเช‚เชŸเซ‹ (), เช…เชจเซ‡ เชŸเซเชฐเซ‡เชธ เชšเชฒเชพเชตเซ‹ - เชฎเชจเซ‡ เช•เซ‹เชˆ เช•เซ‰เชฒเซเชธ เชฎเชณเชถเซ‡ เชจเชนเซ€เช‚ เช•เชพเช‚เชŸเซ‹, เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡ เชคเซเชฏเชพเช‚ เชนเชถเซ‡ เช•เซเชฒเซ‹เชจ(). เชœเซ‹ เชคเชฎเซ‡ เช†เช‰เชŸเชชเซเชŸ เชธเชพเชฅเซ‡ เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ‹ เชคเซ‹ เชœ เช†เชตเชพ เชฐเซ‡เช•เซเชธ เชคเชฎเชจเซ‡ เชฎเซ‚เช‚เชเชตเชฃเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡ เชธเซเชŸเซเชฐเซ‡เชธ.

เชซเชพเช‡เชฒเชฎเชพเช‚ เช†เช‰เชŸเชชเซเชŸ เชธเชพเชšเชตเชตเชพ เชฎเชพเชŸเซ‡ -o เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹

เชธเซเชŸเซเชฐเซ‡เชธ เชตเซเชฏเชพเชชเช• เช†เช‰เชŸเชชเซเชŸ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡, เชคเซ‡เชฅเซ€ เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เช…เชฒเช— เชซเชพเชˆเชฒเซ‹เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เช˜เชฃเซ€ เชตเช–เชค เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡ (เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚). เช† เช†เช‰เชŸเชชเซเชŸ เชธเชพเชฅเซ‡ เช—เซ‚เช‚เชšเชตเชฃเชญเชฐเซเชฏเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช†เช‰เชŸเชชเซเชŸเชจเซ‡ เชŸเชพเชณเชตเชพเชฎเชพเช‚ เชชเชฃ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เช•เชจเซเชธเซ‹เชฒ เชฎเชพเช‚.

เชตเชงเซ เชฆเชฒเซ€เชฒ เชกเซ‡เชŸเชพ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ -s เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹

เชคเชฎเซ‡ เชจเซ‹เช‚เชงเซเชฏเซเช‚ เชนเชถเซ‡ เช•เซ‡ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถเชจเซ‹ เชฌเซ€เชœเซ‹ เชญเชพเช— เช‰เชชเชฐเชจเชพ เช‰เชฆเชพเชนเชฐเชฃ เชŸเซเชฐเซ‡เชธเชฎเชพเช‚ เชฌเชคเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชจเชฅเซ€. เชคเซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เชกเชฟเชซเซ‰เชฒเซเชŸ เชธเซเชŸเซเชฐเชฟเช‚เช— เชฆเชฒเซ€เชฒเชจเชพ เชฎเชพเชคเซเชฐ เชชเซเชฐเชฅเชฎ 32 เชฌเชพเช‡เชŸเซเชธ เชฌเชคเชพเชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเชฎเซ‡ เชตเชงเซ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เชคเชพ เชนเซ‹, เชคเซ‹ เช•เช‚เชˆเช• เช‰เชฎเซ‡เชฐเซ‹ -เชธ 128 เช•เซ‰เชฒ เชฎเชพเชŸเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ.

-y เชซเชพเช‡เชฒเซ‹, เชธเซ‹เช•เซ‡เชŸเซเชธ เชตเช—เซ‡เชฐเซ‡เชจเซ‡ เชŸเซเชฐเซ…เช• เช•เชฐเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ‡ เช›เซ‡.

"เชฌเชงเซเช‚ เชซเชพเช‡เชฒ เช›เซ‡" เชจเซ‹ เช…เชฐเซเชฅ เช›เซ‡ เช•เซ‡ *เชจเชฟเช•เซเชธ เชธเชฟเชธเซเชŸเชฎเซเชธ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเช“เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฎ I/O เช•เชฐเซ‡ เช›เซ‡, เชชเช›เซ€ เชญเชฒเซ‡ เชคเซ‡ เชซเชพเช‡เชฒ เช…เชฅเชตเชพ เชจเซ‡เชŸเชตเชฐเซเช• เช…เชฅเชตเชพ เช‡เชจเซเชŸเชฐเชชเซเชฐเซ‹เชธเซ‡เชธ เชชเชพเชˆเชชเซ‹เชจเซ‡ เชฒเชพเช—เซ เชชเชกเซ‡. เช† เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชฎเชพเชŸเซ‡ เช…เชจเซเช•เซ‚เชณ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชœเซเช“ เชคเซเชฏเชพเชฐเซ‡ เช–เชฐเซ‡เช–เชฐ เชถเซเช‚ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซ‹ เชŸเซเชฐเซ…เช• เชฐเชพเช–เชตเซ‹ เชฎเซเชถเซเช•เซ‡เชฒ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เชตเชพเช‚เชšเชตเซเช‚ ะธ เชฒเช–เซ€ เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒ เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚.

เช“เชชเชฐเซ‡เชŸเชฐ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ -ัƒ, เชคเชฎเซ‡ เชฆเชฌเชพเชฃ เช•เชฐเชถเซ‹ เชธเซเชŸเซเชฐเซ‡เชธ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ เชฆเชฐเซ‡เช• เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเชจเซ‡ เชคเซ‡ เชถเซเช‚ เชจเชฟเชฐเซเชฆเซ‡เชถ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเซ€ เชจเซ‹เช‚เชง เชธเชพเชฅเซ‡ เชŸเซ€เช•เชพ เช•เชฐเซ‹.

-p** เชธเชพเชฅเซ‡ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเชพเชฅเซ‡ เชœเซ‹เชกเซ‹

เชœเซ‡เชฎ เชคเชฎเซ‡ เชจเซ€เชšเซ‡เชจเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚เชฅเซ€ เชœเซ‹เชถเซ‹, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชคเชฎเชพเชฐเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชšเชพเชฒเซ€ เชฐเชนเซ‡เชฒ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชจเซ‡ เชŸเซเชฐเซ‡เชธ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชœเซ‹ เชคเซ‡ เชœเชพเชฃเซ€เชคเซเช‚ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ 1337 เชคเชฐเซ€เช•เซ‡ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ (เช•เชนเซ‹, เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚เชฅเซ€ ps), เชคเซ‹ เชชเช›เซ€ เชคเชฎเซ‡ เชคเซ‡เชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹:

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

เชคเชฎเชจเซ‡ เชฐเซ‚เชŸ เช…เชงเชฟเช•เชพเชฐเซ‹เชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเซ€ เชถเช•เซ‡ เช›เซ‡.

เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“ เชชเชฐ เชฆเซ‡เช–เชฐเซ‡เช– เชฐเชพเช–เชตเชพ เชฎเชพเชŸเซ‡ -f เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹

เชธเซเชŸเซเชฐเซ‡เชธ เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡, เชคเซ‡ เชฎเชพเชคเซเชฐ เชเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชŸเซเชฐเซ‡เชธ เช•เชฐเซ‡ เช›เซ‡. เชœเซ‹ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชœเชจเซเชฎ เช†เชชเซ‡ เช›เซ‡, เชคเซ‹ เชชเช›เซ€ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชซเซ‡เชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเชพ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชถเซ‡ เชจเชนเซ€เช‚.

เชœเซ‹ เชคเชฎเชจเซ‡ เชฒเชพเช—เซ‡ เช•เซ‡ เชญเซ‚เชฒ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชฎเชพเช‚ เช›เซ‡, เชคเซ‹ เชจเชฟเชตเซ‡เชฆเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‹ -f, เช† เชคเซ‡เชจเชพ เชŸเซเชฐเซ‡เชธเชฟเช‚เช—เชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชถเซ‡. เช†เชจเซเช‚ เชจเซเช•เชธเชพเชจ เช เช›เซ‡ เช•เซ‡ เช†เช‰เชŸเชชเซเชŸ เชคเชฎเชจเซ‡ เชตเชงเซ เชฎเซ‚เช‚เชเชตเชฃเชฎเชพเช‚ เชฎเซ‚เช•เชถเซ‡. เช•เซเชฏเชพเชฐเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ เชเช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช…เชฅเชตเชพ เชเช• เชฅเซเชฐเซ‡เชกเชจเซ‡ เชŸเซเชฐเซ‡เชธ เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡ เช•เซ‰เชฒ เช‡เชตเซ‡เชจเซเชŸเซเชธเชจเซ€ เชเช• เชธเซเชŸเซเชฐเซ€เชฎ เชฌเชคเชพเชตเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชเช•เชธเชพเชฅเซ‡ เช…เชจเซ‡เช• เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชŸเซเชฐเซ‡เชธ เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเซ‡ เชธเช‚เชฆเซ‡เชถ เชฆเซเชตเชพเชฐเชพ เชตเชฟเช•เซเชทเซ‡เชชเชฟเชค เช•เซ‰เชฒเชจเซ€ เชถเชฐเซ‚เช†เชค เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ , เชชเช›เซ€ - เช…เชจเซเชฏ เชเช•เซเชเซ‡เช•เซเชฏเซเชถเชจ เชถเชพเช–เชพเช“ เชฎเชพเชŸเซ‡ เช•เซ‰เชฒเซเชธเชจเซ‹ เชธเชฎเซ‚เชน, เช…เชจเซ‡ เชคเซ‡ เชชเช›เซ€ เชœ - เชชเซเชฐเชฅเชฎเชจเซ‹ เช…เช‚เชค . เช…เชฅเชตเชพ เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฎ เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชตเชฟเชตเชฟเชง เชซเชพเช‡เชฒเซ‹เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ‹ -ff (เชฎเชพเช‚ เชตเชฟเช—เชคเซ‹ เชจเซ‡เชคเซƒเชคเซเชต เชชเชฐ เชธเซเชŸเซเชฐเซ‡เชธ).

-e เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเชฟเชถเชพเชจเซ‹ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‹

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เชŸเซเชฐเซ‡เชธเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช เชคเชฎเชพเชฎ เชธเช‚เชญเชตเชฟเชค เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชจเซ‹ เชตเชพเชธเซเชคเชตเชฟเช• เช–เซ‚เช‚เชŸเซ‹ เช›เซ‡. เชงเซเชตเชœ -e เชคเชฎเซ‡ เชŸเซเชฐเซ‡เชธ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชœเซเช“ เชจเซ‡เชคเซƒเชคเซเชต เชชเชฐ เชธเซเชŸเซเชฐเซ‡เชธ). เชฎเซเช–เซเชฏ เชซเชพเชฏเชฆเซ‹ เช เช›เซ‡ เช•เซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชŸเซเชฐเซ‡เชธ เช•เชฐเชตเชพ เช•เชฐเชคเชพเช‚ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‡เชฒ เชŸเซเชฐเซ‡เชธ เชšเชฒเชพเชตเชตเชพเชจเซเช‚ เชเชกเชชเซ€ เช›เซ‡ เช…เชจเซ‡ เชชเช›เซ€ grep`เชเชŸ. เชธเชพเชšเซเช‚ เช•เชนเซเช‚ เชคเซ‹, เชนเซเช‚ เชฒเช—เชญเช— เชนเช‚เชฎเซ‡เชถเชพ เช•เชพเชณเชœเซ€ เชฐเชพเช–เชคเซ‹ เชจเชฅเซ€.

เชฌเชงเซ€ เชญเซ‚เชฒเซ‹ เช–เชฐเชพเชฌ เชจเชฅเซ€ เชนเซ‹เชคเซ€

เชเช• เชธเชฐเชณ เช…เชจเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เช‰เชฆเชพเชนเชฐเชฃ เช เชเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎ เช›เซ‡ เชœเซ‡ เชเช•เชธเชพเชฅเซ‡ เช˜เชฃเซ€ เชœเช—เซเชฏเชพเช เชซเชพเช‡เชฒ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡, เชœเซ‡เชฎ เช•เซ‡ เชถเซ‡เชฒ เชเช•เซเชเชฟเช•เซเชฏเซเชŸเซ‡เชฌเชฒ เชซเชพเช‡เชฒ เชงเชฐเชพเชตเชคเซ€ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชจเซ‡ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡:

$ 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 เชฎเชพเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชจเซ‡ เชถเซเช‚ เช•เชฐเชตเซเช‚, เชคเซ‹ เชคเชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชŸเซเชฐเซ‡เชธเชจเชพ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชธเชฎเชœเชตเซเช‚ เชธเชฐเชณ เชฌเชจเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชฎเชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชธเชฟเชธเซเชŸเชฎเซเชธ เชชเชฐ เช•เซ‰เชฒ เชกเชฟเชฌเช— เช•เชฐเชตเชพเชฎเชพเช‚ เชธเชฎเชธเซเชฏเชพ เช›เซ‡, เชคเซ‡ เชœ เช•เซเชฒเชพเชธเชฟเช• เชœเซเช“ เชจเซ‡เชŸเชตเชฐเซเช• เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชฎเชพเชŸเซ‡ เชฌเชฟเชœเชพเชจเซ€ เชฎเชพเชฐเซเช—เชฆเชฐเซเชถเชฟเช•เชพ.

เชตเชงเซ เชœเชŸเชฟเชฒ เชกเซ€เชฌเช—เซ€เช‚เช— เช‰เชฆเชพเชนเชฐเชฃ

เชฎเซ‡เช‚ เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เช•เชนเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชธเชฐเชณ เชกเชฟเชฌเช—เซ€เช‚เช—เชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช เชเช• เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชฎเชพเชฐเซ‡ เชฎเซ‹เชŸเซ‡ เชญเชพเช—เซ‡ เชถเซเช‚ เช•เชฐเชตเซเช‚ เชชเชกเซ‡ เช›เซ‡ เชธเซเชŸเซเชฐเซ‡เชธ. เชœเซ‹ เช•เซ‡, เช•เซ‡เชŸเชฒเซ€เช•เชตเชพเชฐ เชตเชพเชธเซเชคเชตเชฟเช• เชคเชชเชพเชธ เชœเชฐเซ‚เชฐเซ€ เชนเซ‹เชฏ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชนเซ€เช‚ เชตเชงเซ เช…เชฆเซเชฏเชคเชจ เชกเซ€เชฌเช—เซ€เช‚เช—เชจเซเช‚ เชตเชพเชธเซเชคเชตเชฟเช• เชœเซ€เชตเชจเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡.

bcron - เชŸเชพเชธเซเช• เชชเซเชฐเซ‹เชธเซ‡เชธเชฟเช‚เช— เชถเซ‡เชกเซเชฏเซ‚เชฒเชฐ, *เชจเชฟเช•เซเชธ เชกเชฟเชฎเชจเชจเซเช‚ เชฌเซ€เชœเซเช‚ เช…เชฎเชฒเซ€เช•เชฐเชฃ เช•เซเชฐเซ‹เชจ. เชคเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชˆ เชตเซเชฏเช•เซเชคเชฟ เชถเซ‡เชกเซเชฏเซ‚เชฒเชจเซ‡ เชธเช‚เชชเชพเชฆเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ‡ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เช† เชฅเชพเชฏ เช›เซ‡:

# 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 +++

เช–เซ‚เชฌ เชœ เช…เช‚เชคเชจเซ€ เชจเชœเซ€เช• เชเช• เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ เช›เซ‡ เชฒเช–เซ€, เชชเชฐเช‚เชคเซ เช† เชตเช–เชคเซ‡ เช•เช‚เชˆเช• เช…เชฒเช— เช›เซ‡. เชชเซเชฐเชฅเชฎ, เชคเซเชฏเชพเช‚ เช•เซ‹เชˆ เชธเช‚เชฌเช‚เชงเชฟเชค เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชญเซ‚เชฒ เชจเชฅเซ€, เชœเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช† เชชเชนเซ‡เชฒเชพเช‚ เชฅเชพเชฏ เช›เซ‡. เชฌเซ€เชœเซเช‚, เชคเซ‡ เชธเซเชชเชทเซเชŸ เช›เซ‡ เช•เซ‡ เช•เซเชฏเชพเช‚เช• เช•เซ‹เชˆเช เชชเชนเซ‡เชฒเซ‡เชฅเซ€ เชœ เชญเซ‚เชฒ เชธเช‚เชฆเซ‡เชถ เชตเชพเช‚เชšเซเชฏเซ‹ เช›เซ‡. เชเชตเซเช‚ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฎเชธเซเชฏเชพ เชฌเซ€เชœเซ‡ เช•เซเชฏเชพเช‚เช• เช›เซ‡, เช…เชจเซ‡ bcrontab เช–เชพเชฒเซ€ เชฎเซ‡เชธเซ‡เชœเชจเซ‡ เชชเซเชฒเซ‡ เช•เชฐเซ‡ เช›เซ‡.

เชœเซ‹ เชคเชฎเซ‡ เชœเซเช“ เชฎเชพเชฃเชธ 2 เชตเชพเช‚เชšเซ‹, เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ เช•เซ‡ เชชเซเชฐเชฅเชฎ เชฆเชฒเซ€เชฒ (3) เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ เช›เซ‡, เชœเซ‡ *nix เชคเชฎเชพเชฎ I/O เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฎเชพเชŸเซ‡ เชตเชพเชชเชฐเซ‡ เช›เซ‡. เชนเซเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชถเซ‹เชงเซ€ เชถเช•เซเช‚ เช•เซ‡ เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเชฟเชชเซเชŸเชฐ 3 เชถเซเช‚ เชฐเชœเซ‚ เช•เชฐเซ‡ เช›เซ‡? เช† เชšเซ‹เช•เซเช•เชธ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชคเชฎเซ‡ เชšเชฒเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹ เชธเซเชŸเซเชฐเซ‡เชธ เช“เชชเชฐเซ‡เชŸเชฐ เชธเชพเชฅเซ‡ -ัƒ (เช‰เชชเชฐ เชœเซเช“) เช…เชจเซ‡ เชคเซ‡ เชคเชฎเชจเซ‡ เช†เชชเชฎเซ‡เชณเซ‡ เช•เชนเซ‡เชถเซ‡, เชชเชฐเช‚เชคเซ เช†เชจเชพ เชœเซ‡เชตเซ€ เชธเชพเชฎเช—เซเชฐเซ€เชจเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡, เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชตเชพเช‚เชšเชตเซเช‚ เช…เชจเซ‡ เชคเซ‡เชจเซเช‚ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช•เชฐเชตเซเช‚ เชคเซ‡ เชœเชพเชฃเชตเซเช‚ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡.

เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเชฟเชชเซเชŸเชฐเชจเซ‹ เชธเซเชคเซเชฐเซ‹เชค เช˜เชฃเชพ เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒเซเชธเชฎเชพเช‚เชฅเซ€ เชเช• เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ (เชคเซ‡ เชฌเชงเซเช‚ เชคเซ‡เชจเชพ เชชเชฐ เชจเชฟเชฐเซเชญเชฐ เช•เชฐเซ‡ เช›เซ‡ เช•เซ‡ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ เชถเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช›เซ‡ - เช•เชจเซเชธเซ‹เชฒ, เชจเซ‡เชŸเชตเชฐเซเช• เชธเซ‹เช•เซ‡เชŸ, เชซเชพเช‡เชฒ เชชเซ‹เชคเซ‡, เช…เชฅเชตเชพ เชฌเซ€เชœเซเช‚ เช•เช‚เชˆเช•), เชชเชฐเช‚เชคเซ เชคเซ‡ เช—เชฎเซ‡ เชคเซ‡ เชนเซ‹เชฏ, เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชถเซ‹เชงเซ€เช เช›เซ€เช. 3 เชชเชฐเชค เช•เชฐเซ€เชจเซ‡ เช•เซ‰เชฒ เช•เชฐเซ‹ (เชเชŸเชฒเซ‡ โ€‹โ€‹เช•เซ‡ เช…เชฎเซ‡ เชŸเซเชฐเซ‡เชธเชฟเช‚เช— เชชเชฐเชฟเชฃเชพเชฎเซ‹เชฎเชพเช‚ โ€œ= 3โ€ เชถเซ‹เชงเซ€เช เช›เซ€เช). เช† เชชเชฐเชฟเชฃเชพเชฎเชฎเชพเช‚ เชคเซ‡เชฎเชพเช‚เชจเชพ 2 เช›เซ‡: เช“เชชเชจเซ‡เชŸ เช–เซ‚เชฌ เชœ เชŸเซ‹เชš เชชเชฐ เช…เชจเซ‡ เชธเซ‹เช•เซ‡เชŸ เชตเชšเซเชšเซ‡. เช“เชชเชจเซ‡เชŸ เชซเชพเช‡เชฒ เช–เซ‹เชฒเซ‡ เช›เซ‡ เชชเชฐเช‚เชคเซ เชฌเช‚เชง(3) เชชเช›เซ€ เชฌเชคเชพเชตเชถเซ‡ เช•เซ‡ เชคเซ‡ เชซเชฐเซ€เชฅเซ€ เชฌเช‚เชง เชฅเชพเชฏ เช›เซ‡. (เชฐเซ‡เช•: เชซเชพเช‡เชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐเซเชธ เชœเซเชฏเชพเชฐเซ‡ เช–เซ‹เชฒเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช…เชจเซ‡ เชฌเช‚เชง เชฅเชพเชฏ เชคเซเชฏเชพเชฐเซ‡ เชคเซ‡เชจเซ‹ เชซเชฐเซ€เชฅเซ€ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡). เช•เซ‰เชฒ เช•เชฐเซ‹ เชธเซ‹เช•เซ‡เชŸ() เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชชเชนเซ‡เชฒเชพเชจเซเช‚ เช›เซ‡เชฒเซเชฒเซเช‚ เช›เซ‡ เชตเชพเช‚เชšเชตเซเช‚(), เช…เชจเซ‡ เชคเซ‡ เชคเชพเชฐเชฃ เช†เชชเซ‡ เช›เซ‡ เช•เซ‡ bcrontab เชธเซ‹เช•เซ‡เชŸ เชฆเซเชตเชพเชฐเชพ เช•เช‚เชˆเช• เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เช†เช—เชณเชจเซ€ เชฒเชพเช‡เชจ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เช›เซ‡ เชฏเซเชจเชฟเช•เซเชธ เชกเซ‹เชฎเซ‡เชจ เชธเซ‹เช•เซ‡เชŸ เชฐเชธเซเชคเชพเชฎเชพ /var/run/bcron-sool.

เชคเซ‡เชฅเซ€, เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชธเช‚เช•เชณเชพเชฏเซ‡เชฒ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชถเซ‹เชงเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชฏเซเชจเชฟเช•เซเชธ เชธเซ‹เช•เซ‡เชŸ เชฌเซ€เชœเซ€ เชฌเชพเชœเซ เชชเชฐ. เช† เชนเซ‡เชคเซ เชฎเชพเชŸเซ‡ เช•เซ‡เชŸเชฒเซ€เช• เชธเซเช˜เชก เชฏเซเช•เซเชคเชฟเช“ เช›เซ‡, เชœเซ‡ เชฌเช‚เชจเซ‡ เชธเชฐเซเชตเชฐ เชœเชฎเชพเชตเชŸเชจเซ‡ เชกเซ€เชฌเช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฏเซ‹เช—เซ€ เช›เซ‡. เชชเซเชฐเชฅเชฎ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ‹ เช›เซ‡ เชจเซ‡เชŸเชธเซเชŸเซ‡เชŸ เช…เชฅเชตเชพ เชตเชงเซ เชจเชตเซเช‚ ss (เชธเซ‹เช•เซ‡เชŸ เชธเซเชฅเชฟเชคเชฟ). เชฌเช‚เชจเซ‡ เช†เชฆเซ‡เชถเซ‹ เชธเชฟเชธเซเชŸเชฎเชจเชพ เชธเช•เซเชฐเชฟเชฏ เชจเซ‡เชŸเชตเชฐเซเช• เชœเซ‹เชกเชพเชฃเซ‹ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชจเชฟเชตเซ‡เชฆเชจ เชฒเซ‡ เช›เซ‡ -l เชธเชพเช‚เชญเชณเชตเชพเชจเชพ เชธเซ‹เช•เซ‡เชŸเซเชธ, เชคเซ‡เชฎเชœ เช“เชชเชฐเซ‡เชŸเชฐเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ -p เช•เซเชฒเชพเชฏเชจเซเชŸ เชคเชฐเซ€เช•เซ‡ เชธเซ‹เช•เซ‡เชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเซเชธ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡. (เชคเซเชฏเชพเช‚ เช˜เชฃเชพ เชตเชงเซ เช‰เชชเชฏเซ‹เช—เซ€ เชตเชฟเช•เชฒเซเชชเซ‹ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เชฌเซ‡ เช† เช•เชพเชฐเซเชฏ เชฎเชพเชŸเซ‡ เชชเซ‚เชฐเชคเชพ เช›เซ‡.)

# 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, เชชเซเชฐเซ‹เชธเซ‡เชธ เช†เชˆเชกเซ€ 20629 เชธเชพเชฅเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. (เช…เชจเซ‡, เชธเช‚เชฏเซ‹เช—เชฅเซ€, เชคเซ‡ เชธเซ‹เช•เซ‡เชŸ เชคเชฐเซ€เช•เซ‡ เชซเชพเชˆเชฒ เชกเชฟเชธเซเช•เซเชฐเซ€เชชเซเชŸเชฐ 3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡.)

เชธเชฎเชพเชจ เชฎเชพเชนเชฟเชคเซ€ เชถเซ‹เชงเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เชฌเซ€เชœเซเช‚ เช–เชฐเซ‡เช–เชฐ เช‰เชชเชฏเซ‹เช—เซ€ เชธเชพเชงเชจ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ lsof. เชคเซ‡ เชธเชฟเชธเซเชŸเชฎ เชชเชฐเชจเซ€ เชฌเชงเซ€ เช–เซเชฒเซเชฒเซ€ เชซเชพเช‡เชฒเซ‹ (เช…เชฅเชตเชพ เชซเชพเช‡เชฒ เชตเชฐเซเชฃเชจเช•เชฐเซเชคเชพเช“)เชจเซ€ เชฏเชพเชฆเซ€ เช†เชชเซ‡ เช›เซ‡. เช…เชฅเชตเชพ เชคเชฎเซ‡ เชเช• เชšเซ‹เช•เซเช•เชธ เชซเชพเช‡เชฒ เชตเชฟเชถเซ‡ เชฎเชพเชนเชฟเชคเซ€ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹:

# 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. เชœเซ‹ เชคเชฎเซ‡ เชฌเซ€เชœเชพ เชŸเชฐเซเชฎเชฟเชจเชฒเชฎเชพเช‚ เช•เซเชฐเซ‹เชจ เชœเซ‹เชฌ เชเชกเชฟเชŸ เช•เชฐเซ‹ เช›เซ‹, เชคเซ‹ เชคเชฎเชจเซ‡ เชญเซ‚เชฒ เชธเชพเชฅเซ‡ เชŸเซเชฐเซ‡เชธ เช†เช‰เชŸเชชเซเชŸ เชฎเชณเชถเซ‡. เช…เชจเซ‡ เช…เชนเซ€เช‚ เชชเชฐเชฟเชฃเชพเชฎ เช›เซ‡:

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

(เช›เซ‡เชฒเซเชฒเชพ เชธเซเชตเซ€เช•เชพเชฐเซ‹() เชŸเซเชฐเซ‡เชธ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡ เชจเชนเซ€เช‚.) เชซเชฐเซ€เชฅเซ€, เช•เชฎเชจเชธเซ€เชฌเซ‡, เช† เชชเชฐเชฟเชฃเชพเชฎเชฎเชพเช‚ เช…เชฎเซ‡ เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชคเซ‡ เชญเซ‚เชฒ เชถเชพเชฎเซ‡เชฒ เชจเชฅเซ€. เช…เชฎเชจเซ‡ เช•เซ‹เชˆ เชธเช‚เชฆเซ‡เชถเชพ เชฆเซ‡เช–เชพเชคเชพ เชจเชฅเซ€ เช•เซ‡ เชœเซ‡ bcrontag เชธเซ‹เช•เซ‡เชŸเชจเซ‡ เชฎเซ‹เช•เชฒเซ‡ เช›เซ‡ เช…เชฅเชตเชพ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เชจเชพ เชฌเชฆเชฒเซ‡, เชธเช‚เชชเซ‚เชฐเซเชฃ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชจเชฟเชฏเช‚เชคเซเชฐเชฃ (เช•เซเชฒเซ‹เชจ, เชฐเชพเชน เชœเซเช“4, SIGCHLD เชตเช—เซ‡เชฐเซ‡.) เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฌเชพเชณ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชœเชจเซเชฎ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡ เชคเชฎเซ‡ เชงเชพเชฐเซ€ เชถเช•เซ‹ เช›เซ‹, เชตเชพเชธเซเชคเชตเชฟเช• เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡. เช…เชจเซ‡ เชœเซ‹ เชคเชฎเชพเชฐเซ‡ เชคเซ‡เชจเซเช‚ เชชเช—เซ‡เชฐเซเช‚ เชชเช•เชกเชตเซเช‚ เชนเซ‹เชฏ, เชคเซ‹ เช•เซ‰เชฒเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ‹ strace -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/sool.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 +++

(เชœเซ‹ เชคเชฎเซ‡ เช–เซ‹เชตเชพเชˆ เช—เชฏเชพ เชนเซ‹, เชคเซ‹ เชคเชฎเซ‡ เช•เชฆเชพเชš เชฎเชพเชฐเซ€ เช…เช—เชพเช‰เชจเซ€ เชชเซ‹เชธเซเชŸ เชตเชพเช‚เชšเชตเชพ เชฎเชพเช—เซ‹ เช›เซ‹ *เชจเชฟเช•เซเชธ เชชเซเชฐเซ‹เชธเซ‡เชธ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เช…เชจเซ‡ เชถเซ‡เชฒเซเชธ เชตเชฟเชถเซ‡เชคเซ‡เชฅเซ€, เชธเชฐเซเชตเชฐ PID 20629 เชจเซ‡ เชชเชพเชฅ เชชเชฐ เชซเชพเช‡เชฒ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชชเชฐเชตเชพเชจเช—เซ€ เชฎเชณเซ€ เชจเชฅเซ€. /var/sool/cron/tmp/sool.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

เชคเซเชฏเชพเช‚ เชœ เช•เซ‚เชคเชฐเชพเชจเซ‡ เชฆเชซเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡! เชธเชฐเซเชตเชฐ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช•เซเชฐเซ‹เชจ เชคเชฐเซ€เช•เซ‡ เชšเชพเชฒเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชพเชคเซเชฐ เชฐเซ‚เชŸเชจเซ‡ เชœ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชฒเช–เชตเชพเชจเซ€ เชชเชฐเชตเชพเชจเช—เซ€ เช›เซ‡ /var/sool/cron/tmp/. เชธเชฐเชณ เช†เชฆเซ‡เชถ เชšเชพเช‰เชจ เช•เซเชฐเซ‹เชจ /var/เชธเซเชชเซ‚เชฒ/เช•เซเชฐเซ‹เชจ/tmp/ เชฆเชฌเชพเชฃ เช•เชฐเชถเซ‡ bcron เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‹. (เชœเซ‹ เชคเซ‡ เชธเชฎเชธเซเชฏเชพ เชจ เชนเชคเซ€, เชคเซ‹ เชชเช›เซ€เชจเซ€ เชธเช‚เชญเชตเชฟเชค เชถเช‚เช•เชพ เช SELinux เช…เชฅเชตเชพ AppArmor เชœเซ‡เชตเชพ เช•เชฐเซเชจเชฒ เชธเซเชฐเช•เซเชทเชพ เชฎเซ‹เชกเซเชฏเซเชฒ เช›เซ‡, เชคเซ‡เชฅเซ€ เชนเซเช‚ เช•เชฐเซเชจเชฒ เชธเช‚เชฆเซ‡เชถ เชฒเซ‹เช—เชจเซ‡ เชคเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เชคเชชเชพเชธเซ€เชถ. dmesg.)

เช•เซเชฒ

เชธเชฟเชธเซเชŸเชฎ เช•เซ‰เชฒ เชŸเซเชฐเซ‡เชธ เชถเชฟเช–เชพเช‰ เชฎเชพเชฃเชธ เชฎเชพเชŸเซ‡ เชœเชฌเชฐเชœเชธเซเชค เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเชจเซ‡ เช†เชถเชพ เช›เซ‡ เช•เซ‡ เชฎเซ‡เช‚ เชฌเชคเชพเชตเซเชฏเซเช‚ เช›เซ‡ เช•เซ‡ เชคเซ‡ เชธเชพเชฎเชพเชจเซเชฏ เชœเชฎเชพเชตเชŸ เชธเชฎเชธเซเชฏเชพเช“เชจเชพ เชธเช‚เชชเซ‚เชฐเซเชฃ เชตเชฐเซเช—เชจเซ‡ เชกเซ€เชฌเช— เช•เชฐเชตเชพเชจเซ€ เชเชกเชชเซ€ เชฐเซ€เชค เช›เซ‡. เชฎเชฒเซเชŸเซ€เชชเซเชฐเซ‹เชธเซ‡เชธเชจเซ‡ เชกเซ€เชฌเช— เช•เชฐเชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเชตเชพเชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‹ bcronเชธเซเชŸเซ‡เชช-เชฌเชพเชฏ-เชธเซเชŸเซ‡เชช เชกเซ€เชฌเช—เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡.

เชธเชฟเชธเซเชŸเชฎ เช•เซ‹เชฒ เชšเซ‡เช‡เชจ เชธเชพเชฅเซ‡ เชชเชพเช›เชณเชจเซ€ เชคเชฐเชซ เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเซ‡ เชชเชพเชฐเซเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซŒเชถเชฒเซเชฏเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชชเชฐเช‚เชคเซ เชฎเซ‡เช‚ เช•เชนเซเชฏเซเช‚ เชคเซ‡เชฎ, เชฒเช—เชญเช— เชนเช‚เชฎเซ‡เชถเชพ, เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชธเซเชŸเซเชฐเซ‡เชธ, เชฎเชจเซ‡ เชซเช•เซเชค เชŸเซเชฐเซ‡เชธ เชชเชฐเชฟเชฃเชพเชฎ เชฎเชณเซ‡ เช›เซ‡ เช…เชจเซ‡ เช…เช‚เชคเชฅเซ€ เชถเชฐเซ‚ เชฅเชคเซ€ เชญเซ‚เชฒเซ‹ เชถเซ‹เชงเซเช‚ เช›เซเช‚. เช•เซ‹เชˆเชชเชฃ เชฐเซ€เชคเซ‡, เชธเซเชŸเซเชฐเซ‡เชธ เชฎเชจเซ‡ เชกเชฟเชฌเช—เซ€เช‚เช— เชชเชฐ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฌเชšเชพเชตเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡. เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เชคเซ‡ เชคเชฎเชจเซ‡ เชชเชฃ เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹