#!/bin/bash # pid-identifier.sh: PID¿¡ ÇØ´çÇÏ´Â ÇÁ·Î¼¼½ºÀÇ ¿ÏÀüÇÑ °æ·Î¸íÀ» ã±â. ARGNO=1 # ÇÊ¿äÇÑ ÀÎÀÚ ¼ö. E_WRONGARGS=65 E_BADPID=66 E_NOSUCHPROCESS=67 E_NOPERMISSION=68 PROCFILE=exe if [ $# -ne $ARGNO ] then echo "»ç¿ë¹ý: `basename $0` PID-number" >&2 # ¿¡·¯ ¸Þ¼¼Áö >Ç¥ÁØ¿¡·¯. exit $E_WRONGARGS fi pidno=$( ps ax | grep $1 | awk '{ print $1 }' | grep $1 ) # "ps" ¸ñ·Ï¿¡¼ pid(ù¹ø° Çʵå)¸¦ È®ÀÎ. # ±× ´ÙÀ½¿¡´Â ÀÌ ½ºÅ©¸³Æ®°¡ ½ÇÇà½ÃŲ ÇÁ·Î¼¼½º°¡ ¾Æ´Ñ ½ÇÁ¦ ÇÁ·Î¼¼½ºÀÎÁö È®ÀÎ. # ¸¶Áö¸·ÀÇ "grep $1"ÀÌ ÀÌ·± °¡´É¼ºÀ» Á¦°ÅÇØ ÁÝ´Ï´Ù. if [ -z "$pidno" ] # °á°ú°¡ ¾Æ¹«°Íµµ ¾ø´Ù¸é ±æÀÌ°¡ 0ÀÎ ¹®ÀÚ¿ÀÌ µË´Ï´Ù. then # ÁÖ¾îÁø pid·Î ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º°¡ ¾øÀ½. echo "½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º°¡ ¾ø½À´Ï´Ù." exit $E_NOSUCHPROCESS fi # ´ë½Å ÀÌ·¸°Ô Çصµ µË´Ï´Ù: # if ! ps $1 > /dev/null 2>&1 # then # ÁÖ¾îÁø pid·Î ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º ¾øÀ½. # echo "½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º°¡ ¾ø½À´Ï´Ù." # exit $E_NOSUCHPROCESS # fi # ÀÌ Àüü °úÁ¤Àº "pidof" ¸í·É¾î·Î °£´ÜÇÏ°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. if [ ! -r "/proc/$1/$PROCFILE" ] # Àбâ ÆÛ¹Ì¼Ç È®ÀÎ. then echo "$1 ÇÁ·Î¼¼½º´Â ½ÇÇàÁßÀÌÁö¸¸," echo "/proc/$1/$PROCFILE À» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù." exit $E_NOPERMISSION # ÀÏ¹Ý »ç¿ëÀÚ´Â /proc ÀÇ ¸î¸î ÆÄÀÏ¿¡ Á¢±ÙÇÒ ¼ö ¾ø½À´Ï´Ù. fi # ¹Ù·Î ¾ÕÀÇ µÎ Å×½ºÆ®µéÀ» ÀÌ·¸°Ô ÇÒ ¼öµµ ÀÖ½À´Ï´Ù: # if ! kill -0 $1 > /dev/null 2>&1 # '0' Àº ½Ã±×³ÎÀÌ ¾Æ´Ï°í ÇØ´ç ÇÁ·Î¼¼½º¿¡ # ½Ã±×³ÎÀ» º¸³¾ ¼ö ÀÖ´ÂÁö¸¦ È®ÀÎÇؼ # ½ÇÇà ¿©ºÎ¸¦ ¾Ë ¼ö ÀÖ½À´Ï´Ù. # then echo "PID °¡ Á¸ÀçÇÏÁö ¾Ê°Å³ª ¼ÒÀ¯ÀÚ°¡ ¾Æ´Õ´Ï´Ù." >&2 # exit $E_BADPID # fi exe_file=$( ls -l /proc/$1 | grep "exe" | awk '{ print $11 }' ) # ȤÀº exe_file=$( ls -l /proc/$1/exe | awk '{print $11}' ) # # /proc/pid-number/exe ´Â ±× ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½ºÀÇ # ¿ÏÀüÇÑ °æ·Î¸í¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©ÀÔ´Ï´Ù. if [ -e "$exe_file" ] # /proc/pid-number/exe °¡ Á¸ÀçÇÑ´Ù¸é... then # ÇØ´ç ÇÁ·Î¼¼½º°¡ Á¸ÀçÇÏ´Â °ÍÀÓ. echo "$1 ¹ø ÇÁ·Î¼¼½º´Â $exe_file À¸·Î ½ÇÇàµÆ½À´Ï´Ù." else echo "½ÇÇàÁßÀÎ ÇÁ·Î¼¼½º°¡ ¾ø½À´Ï´Ù." fi # ÀÌ·¸°Ô °øÀ» µé¿© ÀÛ¼ºÇÑ ÀÌ ½ºÅ©¸³Æ®´Â # ps ax | grep $1 | awk '{ print $5 }' # ·Î "°ÅÀÇ" ´ëÄ¡ °¡´ÉÇÕ´Ï´Ù. # ÇÏÁö¸¸ 'ps'ÀÇ 5¹ø° Çʵ尡 ½ÇÇà ÆÄÀÏÀÇ °æ·ÎÀ̸§ÀÌ ¾Æ´Ï¶ó # ±× ÇÁ·Î¼¼½ºÀÇ argv[0] À̱⠶§¹®¿¡ Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê½À´Ï´Ù. # # ÇÏÁö¸¸ ´ÙÀ½Àº Á¦´ë·Î µÉ °Ì´Ï´Ù. # find /proc/$1/exe -printf '%l\n' # lsof -aFn -p $1 -d txt | sed -ne 's/^n//p' # Stephane Chazelas °¡ Ãß°¡ ¼³¸íÀ» ÇØ ÁÖ¾ú½À´Ï´Ù. exit 0