⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pid-identifier.sh

📁 Shall高级编程
💻 SH
字号:
#!/bin/bash# pid-identifier.sh:# Gives complete path name to process associated with pid.ARGNO=1  # Number of arguments the script expects.E_WRONGARGS=65E_BADPID=66E_NOSUCHPROCESS=67E_NOPERMISSION=68PROCFILE=exeif [ $# -ne $ARGNO ]then  echo "Usage: `basename $0` PID-number" >&2  # Error message >stderr.  exit $E_WRONGARGSfi  pidno=$( ps ax | grep $1 | awk '{ print $1 }' | grep $1 )# Checks for pid in "ps" listing, field #1.# Then makes sure it is the actual process, not the process invoked by this script.# The last "grep $1" filters out this possibility.##    pidno=$( ps ax | awk '{ print $1 }' | grep $1 )#    also works, as Teemu Huovila, points out.if [ -z "$pidno" ]  #  If, after all the filtering, the result is a zero-length string,then                #+ no running process corresponds to the pid given.  echo "No such process running."  exit $E_NOSUCHPROCESSfi  # Alternatively:#   if ! ps $1 > /dev/null 2>&1#   then                # no running process corresponds to the pid given.#     echo "No such process running."#     exit $E_NOSUCHPROCESS#    fi# To simplify the entire process, use "pidof".if [ ! -r "/proc/$1/$PROCFILE" ]  # Check for read permission.then  echo "Process $1 running, but..."  echo "Can't get read permission on /proc/$1/$PROCFILE."  exit $E_NOPERMISSION  # Ordinary user can't access some files in /proc.fi  # The last two tests may be replaced by:#    if ! kill -0 $1 > /dev/null 2>&1 # '0' is not a signal, but                                      # this will test whether it is possible                                      # to send a signal to the process.#    then echo "PID doesn't exist or you're not its owner" >&2#    exit $E_BADPID#    fiexe_file=$( ls -l /proc/$1 | grep "exe" | awk '{ print $11 }' )# Or       exe_file=$( ls -l /proc/$1/exe | awk '{print $11}' )##  /proc/pid-number/exe is a symbolic link#+ to the complete path name of the invoking process.if [ -e "$exe_file" ]  #  If /proc/pid-number/exe exists,then                   #+ then the corresponding process exists.  echo "Process #$1 invoked by $exe_file."else  echo "No such process running."fi  #  This elaborate script can *almost* be replaced by#       ps ax | grep $1 | awk '{ print $5 }'#  However, this will not work...#+ because the fifth field of 'ps' is argv[0] of the process,#+ not the executable file path.## However, either of the following would work.#       find /proc/$1/exe -printf '%l\n'#       lsof -aFn -p $1 -d txt | sed -ne 's/^n//p'# Additional commentary by Stephane Chazelas.exit 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -