°í±Þ Bash ½ºÅ©¸³ÆÃ °¡À̵å: Bash¸¦ ÀÌ¿ëÇÑ ½© ½ºÅ©¸³ÆÃ ¿ÏÀü °¡À̵å | ||
---|---|---|
ÀÌÀü | 11Àå. ³»ºÎ ¸í·É¾î(Internal Commands and Builtins) | ´ÙÀ½ |
´ÙÀ½¿¡ ³ª¿Ã ¸î¸î ÀÛ¾÷ Á¦¾î ¸í·É¾îµéÀº "ÀÛ¾÷ ±¸ºÐÀÚ"(job identifier)¸¦ ÀÎÀÚ·Î ¹Þ½À´Ï´Ù. ÀÌ Àå ¸Ç ³¡¿¡ ÀÖ´Â Å×À̺íÀ» Âü°íÇϼ¼¿ä.
¹é±×¶ó¿îµå·Î µ¹°í ÀÖ´Â ÀÛ¾÷µéÀ» ÀÛ¾÷ ¹øÈ£¿Í ÇÔ²² º¸¿©ÁÝ´Ï´Ù¸¸, ps¸¸Å ¾µ ¸¸ÇÏÁø ¾Ê½À´Ï´Ù.
Âü°í: ÀÛ¾÷(job)°ú ÇÁ·Î¼¼½º¿¡ ´ëÇØ¼ È¥µ¿ÇϱⰡ ½¬¿îµ¥, kill, disown, wait°°Àº ³»Àå ¸í·ÉÀº ÀÛ¾÷ ¹øÈ£³ª ÇÁ·Î¼¼½º ¹øÈ£, µÑ ´Ù, ÀÎÀÚ·Î ¹Þ¾Æ µéÀÔ´Ï´Ù. ÇÏÁö¸¸ fg, bg, jobs´Â ¿ÀÁ÷ ÀÛ¾÷ ¹øÈ£¸¸ ¹Þ¾Æ µéÀÔ´Ï´Ù.
bash$ sleep 100 & [1] 1384 bash $ jobs [1]+ Running sleep 100 &"1" Àº ÀÛ¾÷ ¹øÈ£(ÇöÀç ½©¿¡ ÀÇÇØ °ü¸®µÇ´Â ÀÛ¾÷µé)À̰í, "1384"´Â ÇÁ·Î¼¼½º ¹øÈ£(½Ã½ºÅÛ¿¡ ÀÇÇØ °ü¸®µÇ´Â ÇÁ·Î¼¼½ºµé)ÀÔ´Ï´Ù. ÀÌ ÀÛ¾÷À̳ª ÇÁ·Î¼¼½º¸¦ Á×ÀÌ·Á¸é kill %1¶ó°í Çϰųª kill 1384¶ó°í ÇÏ¸é µË´Ï´Ù.
Thanks, S.C.
½©ÀÇ È°¼ºÈ ÀÛ¾÷ Å×ÀÌºí¿¡¼ ƯÁ¤ ÀÛ¾÷À» Áö¿ö¹ö¸³´Ï´Ù.
fg ¸í·É¾î´Â ¹é±×¶ó¿îµå¿¡¼ ½ÇÇàÁßÀÎ ÀÛ¾÷À» Æ÷±×¶ó¿îµå·Î µ¹·Á ³õ½À´Ï´Ù. bg ¸í·É¾î´Â ÁßÁöµÇ¾î ÀÖ´ø ÀÛ¾÷À» ¹é±×¶ó¿îµå¿¡¼ ´Ù½Ã µ¹°Ô ÇÕ´Ï´Ù. fg³ª bg¿¡ ÀÛ¾÷ ¹øÈ£°¡ ÁÖ¾îÁöÁö ¾Ê´Â´Ù¸é ÇöÀç µ¹°í ÀÖ´Â ÀÛ¾÷¿¡ ´ëÇØ¼ µ¿ÀÛÇÕ´Ï´Ù.
¹é±×¶ó¿îµå·Î ½ÇÇàÁßÀÎ ¸ðµç ÀÛ¾÷À̳ª ¿É¼ÇÀ¸·Î ÁÖ¾îÁø ƯÁ¤ ÀÛ¾÷ ¹øÈ£³ª ÇÁ·Î¼¼½º ¾ÆÀ̵𰡠³¡³¯ ¶§±îÁö ½ºÅ©¸³Æ® ½ÇÇàÀ» Áß´Ü ½Ãŵ´Ï´Ù. ÀÚ½ÅÀÌ ±â´Ù¸®°í ÀÖ´ø ¸í·É¾îÀÇ Á¾·á »óŸ¦ ¸®ÅÏÇÕ´Ï´Ù.
¹é±×¶ó¿îµå ÀÛ¾÷ÀÌ ³¡³ª±â Àü¿¡ ½ºÅ©¸³Æ®°¡ ³¡³ª´Â °Í(¹«¼¿î °í¾Æ ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î ³¾ ¼ö ÀÖ½À´Ï´Ù)À» ÇÇÇϱâ À§ÇØ wait ¸í·É¾î¸¦ ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
¿¹ 11-16. ÀÛ¾÷À» °è¼Ó ÇØ ³ª°¡±â Àü¿¡ ÇÁ·Î¼¼½º°¡ ³¡³ª±æ ±â´Ù¸®±â
#!/bin/bash ROOT_UID=0 # $UID °¡ 0ÀÎ »ç¿ëÀÚ¸¸ÀÌ ·çÆ® ±ÇÇÑÀ» °®½À´Ï´Ù. E_NOTROOT=65 E_NOPARAMS=66 if [ "$UID" -ne "$ROOT_UID" ] then echo "ÀÌ ½ºÅ©¸³Æ®´Â ·çÆ®¸¸ ½ÇÇà½Ãų ¼ö ÀÖ½À´Ï´Ù." # "Àß ½Ã°£ÀÌ Áö³ °Í °°Àºµ¥ ²¨ÁöÁö ±×·¡." exit $E_NOTROOT fi if [ -z "$1" ] then echo "»ç¿ë¹ý: `basename $0` find-string" exit $E_NOPARAMS fi echo "'locate' µ¥ÀÌŸº£À̽º ¾÷µ¥ÀÌÆ®Áß..." echo "½Ã°£ÀÌ °É¸± ¼ö ÀÖ½À´Ï´Ù." updatedb /usr & # ·çÆ®·Î ½ÇÇà½ÃÄÑ¾ß µË´Ï´Ù. wait # 'updatedb' °¡ ³¡³ª±â Àü±îÁö ÀÌ ´ÙÀ½ ºÎºÐÀ» ½ÇÇà ½ÃŰÁö ¾Ê½À´Ï´Ù. # ¾Æ¸¶µµ ¾÷µ¥ÀÌÆ®µÈ Ãֽе¥ÀÌŸº£À̽º¿¡ # ¿©·¯ºÐÀÇ Ã£´Â ÆÄÀÏÀÌ ¹Ý¿µµÅ Àֱ⸦ ¹Ù¶öÅ״ϱî¿ä. locate $1 # wait ¸í·É¾î¸¦ ¾²¸é, # 'updatedb' °¡ µ¹°í Àִµ¥ ½ºÅ©¸³Æ®°¡ Á¾·áµÇ´Â ÃÖ¾ÇÀÇ ½Ã³ª¸®¿À¿¡¼ # °í¾Æ ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â °ÍÀ» ¸·¾ÆÁÝ´Ï´Ù. exit 0 |
wait %1 À̳ª wait $PPID ó·³ wait¿¡ ÀÛ¾÷ ID¸¦ ÀÎÀÚ·Î ÁÙ ¼öµµ ÀÖ½À´Ï´Ù. ÀÛ¾÷ ID Å×À̺íÀ» Âü°íÇϼ¼¿ä.
ÀÛÀº Á¤º¸: ½ºÅ©¸³Æ®¿¡¼ ¾î¶² ¸í·É¾î¸¦ ¹é±×¶ó¿îµå·Î µ¹¸®·Á°í & ¸¦ ºÙ¿©¼ ½ÇÇà½ÃŰ¸é ½ºÅ©¸³Æ®°¡ ENTER¸¦ Ä¥ ¶§±îÁö ¸ØÃç ÀÖÀ» ¼ö ÀÖ½À´Ï´Ù. ¸í·É¾î°¡ Ç¥ÁØÃâ·ÂÀ¸·Î ¾²±â ¶§¹®¿¡ »ý±â´Â ¹®Á¦Ã³·³ º¸À̴µ¥, ÀÌ°Í ¶§¹®¿¡ ¾ÆÁÖ ¼º°¡½Ç ¼ö ÀÖ½À´Ï´Ù.
#!/bin/bash # test.sh ls -l & echo "Done."
bash$ ./test.sh Done. [bozo@localhost test-scripts]$ total 1 -rwxr-xr-x 1 bozo bozo 34 Oct 11 15:09 test.sh¹é±×¶ó¿îµå·Î µ¹¸± ¸í·É¾î ´ÙÀ½¿¡ wait¸¦ µÎ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ¾î º¸ÀÔ´Ï´Ù.
#!/bin/bash # test.sh ls -l & echo "Done." wait¸í·É¾îÀÇ Ãâ·ÂÀ» ¾Æ¹« ÆÄÀÏÀ̳ª /dev/null·Î ÀçÁöÇâÇÏ´Â °Íµµ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.
bash$ ./test.sh Done. [bozo@localhost test-scripts]$ total 1 -rwxr-xr-x 1 bozo bozo 34 Oct 11 15:09 test.sh
Control-Z ¿Í ºñ½ÁÇÑ È¿°ú¸¦ °®°í ÀÖÁö¸¸ À̰ÍÀº ½©À» suspend ½Ãŵ´Ï´Ù(½©ÀÇ ºÎ¸ð ÇÁ·Î¼¼½º´Â Àû´çÇÑ ½Ã°£ÀÌ Áö³ª¸é ½ÇÇàÀ» Àç°³ÇÒ °ÍÀÔ´Ï´Ù).
·Î±×ÀÎ ½©À» ºüÁ®³ª°¡±â. ¿É¼ÇÀ¸·Î Á¾·á »óŸ¦ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ½À´Ï´Ù.
¸í·É¾î¸¦ ½ÇÇàÇÏ´Â µ¥ ¾²ÀÎ ½Ã½ºÅÛ ½Ã°£¿¡ ´ëÇÑ Åë°è Á¤º¸¸¦ ´ÙÀ½ Çü½ÄÀ¸·Î º¸¿©ÁÝ´Ï´Ù.
0m0.020s 0m0.020s |
Àû´çÇÑ Á¾·á ½Ã±×³ÎÀ» ÁÖ¾î ÇÁ·Î¼¼½º¸¦ °Á¦·Î ³¡³»°Ô ÇÕ´Ï´Ù(¿¹ 13-4 Âü°í).
Âü°í: kill -lÀ̶ó°í ÇÏ¸é °¡´ÉÇÑ ¸ðµç ½Ã±×³ÎÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. kill -9Àº °£´ÜÇÑ kill¸¸À¸·Î Áױ⸦ °ÅºÎÇÏ´Â Áöµ¶ÇÑ ÇÁ·Î¼¼½º¸¦ "È®½ÇÈ÷ Á׿©ÁÝ´Ï´Ù". °¡²ûÀº, kill -15·Îµµ µÉ ¶§°¡ ÀÖ½À´Ï´Ù. ºÎ¸ð°¡ Á¾·áµÈ "Á»ºñ ÇÁ·Î¼¼½º"´Â Á×ÀÏ ¼ö ¾øÁö¸¸(ÀÌ¹Ì Á×Àº °ÍÀ» Á×ÀÏ ¼ö´Â ¾ø½À´Ï´Ù), º¸ÅëÀº initÀÌ ÀÌ·± »óŸ¦ ±Ý¹æ û¼ÒÇØ ÁÙ °ÍÀÔ´Ï´Ù.
command ¸í·É¾î Áö½Ã¾î´Â "¸í·É¾î"¿¡ ´ëÇÑ º°ÄªÀ̳ª ÇÔ¼ö ã±â¸¦ ÇÏÁö ¾Ê½À´Ï´Ù.
builtin BUILTIN_COMMAND¶ó°í Ä¡¸é "BUILTIN_COMMAND"¸¦ ½© ³»Àå ¸í·É¾î·Î ½ÇÇà ½ÃŰ¸é¼ Àá½Ã °°Àº À̸§À» °¡Áø ÇÔ¼ö¿Í ¿ÜºÎ ½Ã½ºÅÛ ¸í·É¾î¿¡ ´ëÇÑ ±â´ÉÀ» ²¨¹ö¸³´Ï´Ù.
ÀÌ ¸í·É¾î´Â ½© ³»Àå ¸í·ÉÀ» Ű°Å³ª ²ô´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, enable -n killÀ̶ó°í ÇÏ¸é ½© ³»Àå ¸í·ÉÀÎ killÀÇ ±â´ÉÀ» ²ô°í ´ÙÀ½ºÎÅÍ ³ª¿À´Â ¸ðµç kill¿¡ ´ëÇØ¼´Â /bin/killÀ» ½ÇÇà ½Ãŵ´Ï´Ù.
-a ¿É¼ÇÀ» ÁÖ¸é ¸ðµç ½© ³»Àå ¸í·É¿¡ ´ëÇØ °¢°¢ÀÌ »ç¿ë °¡´ÉÇÑ Áö¸¦ º¸¿©ÁÝ´Ï´Ù. -f filename ¿É¼ÇÀº enable ¸í·É¾î°¡ ¹Ì¸® ÄÄÆÄÀÏµÈ ¿ÀºêÁ§Æ® ÆÄÀÏ¿¡¼ °øÀ¯ ¶óÀ̺귯¸®(DLL) ¸ðµâÀ» ³»Àå ¸í·ÉÀ¸·Î ·ÎµåÇϵµ·Ï ÇØ ÁÝ´Ï´Ù. [1].
ÀÌ ¸í·É¾î´Â ksh autoloader¸¦ Bash·Î Æ÷ÆÃÇÑ °ÍÀÔ´Ï´Ù. autoload¸¦ ÇÔ¼ö ¼±¾ð½Ã¿¡ °°ÀÌ ¾²¸é, ±× ÇÔ¼ö°¡ óÀ½ ºÒ¸± °æ¿ì¿¡ ¿ÜºÎ ÆÄÀÏ¿¡¼ ·ÎµåÇÕ´Ï´Ù. [2] ÀÌ·¸°Ô ÇÏ¸é ½Ã½ºÅÛ ¸®¼Ò½º¸¦ Àý¾àÇØ ÁÝ´Ï´Ù.
Á¶½ÉÇÒ °ÍÀº autoload´Â Bash ¼³Ä¡½Ã ±âº»À¸·Î ±ò¸®Áö ¾Ê±â ¶§¹®¿¡ enable -f(À§¸¦ ÂüÁ¶)·Î ·Îµå¸¦ ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù.
Ç¥ 11-1. ÀÛ¾÷ ID(Job Identifiers)
Ç¥½Ã | ¶æ |
---|---|
%N | [N] ÀÛ¾÷ ¼ýÀÚ |
%S | S ¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ÀÛ¾÷À» ºÎ¸§(¸í·É¾îÁÙ) |
%?S | S ¹®ÀÚ¸¦ Æ÷ÇÔÇÏ´Â ÀÛ¾÷À» ºÎ¸§(¸í·É¾îÁÙ) |
%% | "ÇöÀç" ÀÛ¾÷(Æ÷±×¶ó¿îµå¿¡¼ ÁßÁöµÈ ÃÖ±Ù ÀÛ¾÷À̳ª ¹é±×¶ó¿îµå·Î ¸· µ¹±â ½ÃÀÛÇÑ ÀÛ¾÷) |
%+ | "ÇöÀç" ÀÛ¾÷(Æ÷±×¶ó¿îµå¿¡¼ ÁßÁöµÈ ÃÖ±Ù ÀÛ¾÷À̳ª ¹é±×¶ó¿îµå·Î ¸· µ¹±â ½ÃÀÛÇÑ ÀÛ¾÷) |
%- | ¸¶Áö¸· ÀÛ¾÷ |
$! | ÃÖ±Ù ¹é±×¶ó¿îµå ÇÁ·Î¼¼½º |
[1] | ·ÎµåÇÒ ¼ö ÀÖ´Â ³»Àå ¸í·ÉÀÇ C ¼Ò½º´Â º¸Åë /usr/share/doc/bash-?.??/functions µð·ºÅ丮¿¡¼ ãÀ» ¼ö ÀÖ½À´Ï´Ù. enable ¸í·É¾îÀÇ -f ¿É¼ÇÀº ¸ðµç ½Ã½ºÅÛ¿¡¼ °¡´ÉÇÏÁö ¾Ê½À´Ï´Ù. ÁÖÀÇÇϼ¼¿ä. |
[2] | typeset -fu ¶ó°í ÇØ¼ autoload¿Í °°Àº È¿°ú¸¦ °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. |