今天看去/proc目录的时候,知道里面很多有关进程的信息。有些进程PID是个位数或者是比较少的位数号,那么光用ps aux | grep *** 就有些吃力了。
只好又去加上awk啊什么的相关辅助命令。
突然想起刚开始学的时候去敲命令查看每个PID对应的进程很麻烦,于是想写一个好玩儿又实用的小脚本来代替这些命令,而且不论多少位的PID都能够适用。
由此,我总结了一个查看指定PID对应进程信息的通用命令:
ps aux | awk '{ print $2 "\t" $1 "\t" $11 " " $12" " $13 " " }' | grep '^PID' | sed -n '1p'
这样,主干就出来了,但是要”好玩儿” 还要 “适用” 就要加一些辅助代码了~~ 比如用到了sleep和printf工具指令来以小图形的表现方式执行,判断错误的PID号码等等。
但是主要是实用。
高手莫笑,比较简单,菜鸟的代码为:[code]#!/bin/bash
#Description:
# This is a shell script for searching PROCESS which PID has gotten.
#
#Option:
# You can use "$1" ,like this : " SP 3345 ",
# then it will echo the result that the PID is 3345.
#
#2009/11/29 一米短绳
#
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#判断是否存在参数$1,若没有,则需要使用者输入要查找的PID数字。
if [ "$1" ];then
pid_tmp="$1"
else
read -p "Please input the PID : " pid_tmp
fi
# 判断使用者是否真的输入了PID号码。
if [ "$pid_tmp" ];then
printf 'Search the process which PID is %s \n ======>' $pid_tmp
sleep 0.5s
printf '\b=====>'
sleep 0.5s
printf '\b======> Complete! \n'
sleep 0.5s
else
echo "Wrong: PID IS NULL! Exit now !" && exit 1
fi
# 判断输入的PID号码是否有错误。
if [ "$pid_tmp" == "$(echo $pid_tmp | grep [^0-9])" ];then
echo "Wrong: PID IS NOT DIGIT! Exit now !" && exit 2
fi
#开始输出使用者所查找的PID对应的进程信息。
echo -e "PID\tUSER\t\COMMAND"
ps aux | awk '{ print $2 "\t" $1 "\t" $11 " " $12 " " $13 }'|grep "^$pid_tmp" | sed -n '1p'
echo -e "=============================\n"
[/code]以上便是全部代码。
使用用方法:
1,保存为.sh后缀的文件,直接用 sh ****.sh 执行即可。或者更改权限为可执行,然后./****.sh 执行即可。
2,建议修改权限后用ln命令做一符号链接到/bin或/usr/bin中,更改为自己喜欢的命令名称。这样就能像普通命令一样供自己使用了。
例如: 取名为 SProcess.sh,然后 chmod a+x SProcess.sh , ln -s SProcess.sh /bin/SP
这样以后直接执行SP命令即可。
3,技巧:
可以如下下达指令:
SP 1 ---- 查看PID为1的进程相关信息。
SP 123 ---- 查看PID为123的进程相关之信息。
SP 2235 ---- 查看PID为2235的进程相关之信息。
jasonsir 于 2009-12-13 09:20:45发表:
不错谢谢
jasonsir 于 2009-12-13 09:20:42发表:
不错谢谢
cuidahui521 于 2009-12-11 11:52:17发表:
真是受益匪浅
Stanber 于 2009-12-01 00:06:11发表:
支持大虾
一米短绳 于 2009-11-30 22:54:28发表:
[i=s] 本帖最后由 一米短绳 于 2009-11-30 22:56 编辑 [/i]
被楼上看穿了,其实就是为了练手。 -p 参数列出的主要信息部完全。
其实只要 ps -l [PID] 就行了。
===============================
如果实现脚本中的那个通用指令,其实只要如下即可:
ps -eo pid,user,cmd | grep "PID" | sed -n '1p'
===============================
露底----
这个脚本对于我的重要意义是:
1,练习if 语法 (因为其它语言的缘故,总忘记 fi 和 ;then
2,练习$() 和 ? ? 取指令结果为参数。
3,练习 awk sed 基本用法。
4,练习printf标准输出工具的用法以及区别它与C中的主要不同
5,还突发奇想的搞了个进度条~~
===========================
嘿~~~ 其实这个脚本在我虚拟机里有四个版本~~~~菜鸟学习大法啊~~~~~~~
acrofox 于 2009-11-30 22:37:22发表:
如果用来练手,没什么可说的。
但如果是为了实现这个功能,没觉得比 ps 的 -p 参数好用。
Cxaiyu 于 2009-11-30 18:12:54发表:
严重支持分享
一米短绳 于 2009-11-30 17:48:08发表:
其实,上面的某些代码可以用[[ ]] 来代替。
只是,我对[[ ]] 不怎么熟悉,请问哪位兄台帮忙给个资料?我在百度、Google上搜不到…… 很笨哈~~
还有 (()) $(()) 等等 …… 特别希望能够知道它们的根源。 呵呵