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

📄 pid-identifier.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 SH
字号:
#!/bin/bash# pid-identifier.sh: 给出与指定pid相关联进程的完整路径名. ARGNO=1  # 期望的参数个数. 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 )# 从"ps"命令的输出中搜索带有pid的行, pid位置在第一列#1, 由awk过滤出来. # 然后再次确认这就是我们所要找的进程, 而不是由这个脚本调用所产生的进程. # 最后的"grep $1"就是用来过滤掉这种可能性. ##    pidno=$( ps ax | awk '{ print $1 }' | grep $1 )#    这么写就可以了, 这一点由Teemu Huovila指出. if [ -z "$pidno" ]  # 如果经过所有的过滤之后, 得到的结果是一个长度为0的字符串, then                # 那就说明这个pid没有相应的进程在运行.   echo "No such process running."  exit $E_NOSUCHPROCESSfi  # 也可以这么写: #   if ! ps $1 > /dev/null 2>&1#   then                # 没有与给定pid相匹配的进程在运行. #     echo "No such process running."#     exit $E_NOSUCHPROCESS#    fi# 为了简化整个过程, 可以使用"pidof". if [ ! -r "/proc/$1/$PROCFILE" ]  # 检查读权限. then  echo "Process $1 running, but..."  echo "Can't get read permission on /proc/$1/$PROCFILE."  exit $E_NOPERMISSION  # 一般用户不能访问/proc目录下的某些文件. fi  # 最后两个测试可以使用下面的语句来代替: #    if ! kill -0 $1 > /dev/null 2>&1 # '0'不是一个信号, but                                      # 但是这么做, 可以测试一下是否                                      # 可以向该进程发送信号. #    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 }' )# 或       exe_file=$( ls -l /proc/$1/exe | awk '{print $11}' )## /proc/pid-number/exe是一个符号链接, # 指向这个调用进程的完整路径名. if [ -e "$exe_file" ]  # 如果/proc/pid-number/exe存在...then                 # 那么相应的进程就存在.   echo "Process #$1 invoked by $exe_file."else  echo "No such process running."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

⌨️ 快捷键说明

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