Shell脚本获取进程pid的方法

Shell脚本获取进程pid的方法

先上最终命令,比如要获取redis进程的id:

ps aux | grep redis | grep -v "grep" | tr -s ' ' | cut -d ' ' -f 2

分解执行如下:

root > ps aux | grep redis
root              7836   0.0  0.0  4277272    828 s002  S+    2:47下午   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn redis
root                64   0.0  0.0  4347276    544   ??  Ss   日08下午   3:28.13 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6378
root > 
root >  ps aux | grep redis | grep -v "grep"
root                64   0.0  0.0  4347276    544   ??  Ss   日08下午   3:28.14 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6378
root > 
root > ps aux | grep redis | grep -v "grep" | tr -s ' '
root 64 0.0 0.0 4347276 544 ?? Ss 日08下午 3:28.15 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6378
root > 
root > ps aux | grep redis | grep -v "grep" | tr -s ' ' | cut -d ' ' -f 2
64
root > 

grep -v "grep"-v表示--invert-match,也就是反匹配,整句的意思就是不显示带有“grep”字符串的行,因为经常会出现类似以下这样的行,这并不是真正的所以要排除掉:

color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn redis

tr -s ' 'tr是“translate”,转换,-s是“string”的缩写,后面跟着的就是一个字符串,只不过这里指定的字符串为“空格”而已,意思是“压缩给定字符串中连续出现的某个字符串为1个”,这里的“某个”是哪个呢?就是由-s后面指定的那个字符串,比如本例-s后面指定的是“空格”(所以要注意,两个单引号之间是有一个空格的),那么该命令遇到连续多个的空格就会把它压成一个空格,压缩后效果:

root 64 0.0 0.0 4347276 544 ?? Ss 日08下午 3:28.15 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6378

cut -d ' ' -f 2cut是一个linux命令,就是它的英文意思“剪切”,-d是“delimiter”的缩写,定界符,分隔符,意思是按哪个字符串来分隔剪切,很明显我们这里得用“空格”作为分隔符来剪切(所以要注意两个单引号之间是有一个空格的),这样一个字符串就被剪成很多列了,而-f是“field”的意思,即“字段”、“列”,所以-f 2意思就是取cut剪切后的第二列,因为pid是在第二列,所以我们这样就能取到pid。

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

Shell脚本获取进程pid的方法