文档章节

linux shell 编程 11 特殊符号 & 以及和他的恩怨

QH_C
 QH_C
发布于 2015/11/17 22:43
字数 1019
阅读 80
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

这篇文章中主要说说这四个符号: &、&& 、$!、$$ 四个符号。

符号解释:

&&: 逻辑关系 与

& : 在后台运行进程

$! : 是最后运行的后台Process的PID

$$:是脚本运行的当前进程ID号

为什么要在这里说这些符号那,有三个不是在之前已经学习过了吗,原因有一、获取程序的pid

下面我们就看看 这几个符号:

在之前的文章中获取pid 的方式就是如下两种

1、如果是使用ps 命令来查看pid 则: ps -ef |  grep -v 'grep' | grep  'java' | awk '{print $2}'

这个命令就是获取java 这个程序的pid,因为使用ps 命令第一列输出的是user  第二列输出的是 pid 所以就这样我们能获取这个程序的pid

2、如果是按照端口号来查看pid的则: netstat -anp | grep  8080 | awk '{print $7}'  | awk '{split($0,b,"/");print b[1]}'

这个命令就是获取8080 这个端口号的程序的pid ,因为使用netstat  输出的列数的第七列有程序名称和pid 而他们之间是使用“/” 来隔开的,所以使用了 awk 编程命令的split 来获取数组 在获取数组中的值,这样就获得了pid


3、但总是感觉这种方式有点不舒服,感觉代码写的很死,不健壮如果输出的列有变化则就获取不到了。所以我们可以这种方式来试试,那就是 $! 和 & ,通过上面的介绍我们也知道,$! 就是最后运行的process的pid 而 & 是表示在后台执行进程,这样我们就可以使用一个命令来获取程序的pid了

4、简单实例,获取pid

#!/bin/bash
java hello  & echo $! >/usr/src/run.pid

这个脚本很简单,就是运行hello这个java程序, 之后的应该能猜到了,就是获取运行 这个java 的进程pid 在将他重定向到run.pid 这个目录下。

获取这个文件中pid  : $(cat  /usr/src/run.pid)  或使用反引号 ` cat /usr/src/run.pid`

这样我们就能从这个文件中读取之前保存的pid了,获取之后我们可以使用: ps -p $pid | grep 'name' 来获取这个程序是否执行的信息。


5、附上正式脚本

#!/bin/bash

basepath=/www/homepage

PATH=$PATH:$HOME/bin:/usr/local/mysql/lib/mysql/

JAVA_HOME=/usr/java/jdk
ANT_HOME=/usr/java/ant
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/usr/local/resin/lib/jsdk23.jar
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export JAVA_HOME CLASSPATH ANT_HOME PATH

LANG=zh_CN
export LANG
cd $basepath/WebRoot/WEB-INF/classes
PID=`cat /www/homepage/1minute.pid`
content=`ps -p $PID -f |grep DumpFileByMultThread`
if [ "$content" != "" ]; then
        kill -9 $PID
        echo "$PID is killed"
fi
java -classpath .:$basepath/WebRoot/WEB-INF/lib/commons-httpclient-3.0.jar:$basepath/WebRoot/WEB-INF/lib/log4j-1.2.11.jar:$basepath/WebRoot/WEB-INF/lib/commons-logging-1.0.4.jar:$basepath/WebRoot/WEB-INF/lib/commons-codec-1.3.jar:$basepath/WebRoot/WEB-INF/lib/commons-net-1.4.1.jar:$basepath/WebRoot/WEB-INF/lib/jakarta-oro.jar com.soufun.fetch.DumpFileByMultThread $basepath/src/com/soufun/fetch/1minute.txt & echo $! > /www/homepage/1minute.pid
~

注: 这里有个问题 &$! > filenae  这个写在java启动脚本中没问题,但是写在启动tomcat的脚本中不报错 但是获取的那个pid 压根就找不到对应的进程。

上面脚本中主要的地方分析如下:

(1)、使用反引号`` 或者 $() 来执行命令 cat   /www/homepage/1minute.pdi 从这个文件中获取pid

(2)、使用  ps -p $pid -f | grem "name"  获取指定pid下的指定的进程名称的进程信息。注意这里不加 -f 的话就获取不到进程名称,-f 是全名称展示

(3)、如果进程存在则可以获取相关信息,如果不存在则获取不到信息,信息为空

(4)、如果信息不为空的,说明进程在执行, 使用kill  -9  $pid 强制杀死进程以及子进程


6、 附带四个符号:

>、>!、>> 、 < 、这四个符号

>               输出重定向到一个文件或设备 覆盖原来的文件
>!              输出重定向到一个文件或设备 强制覆盖原来的文件
>>             输出重定向到一个文件或设备 追加原来的文件
<               输入重定向到一个程序


QH_C
粉丝 2
博文 75
码字总数 69153
作品 0
朝阳
程序员
私信 提问
加载中
请先登录后再评论。
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
22
Linux 反汇编工具--LDasm

LDasm (Linux 反汇编工具) 是一个基于 Perl/TK 的 objdump/binutils 图形化工具,试图模仿 W32Dasm 工具的外观。可搜索相互参照,将代码从 GAS 转换成 MASM 风格代码等等。...

匿名
2013/01/22
5.3K
1
基于 Debian 的 Linux 发行版--Kali Linux

Kali Linux(以前叫做 BackTrack)是一份基于 Debian 的发行,它带有一套安全和计算机取证工具。其特色在于及时的安全更新,对 ARM 架构的支持,有四种流行的桌面环境供选择,以及能平滑升级...

匿名
2013/03/14
3.5W
10
全新Web编程的js框架--Flapjax

Flapjax是一种全新的、为满足基于客户端的Web应用的需求而设计的一种js框架。其主要特点包括: 事件驱动, 反应评价 基于web service的事件流抽象 提供web service扩展接口 Flapjax简单易学:...

匿名
2013/04/05
754
0
Linux 多屏幕管理软件--XRandR

XRandR是X Rotate and Reflect Extension(改变大小与旋转扩充)的缩写,用来在命令行界面中对linux系统中的 X窗口系统的多屏幕做出一些设定的软件,能更改外接屏幕的大小、分辨率等...

匿名
2012/10/22
3K
0

没有更多内容

加载失败,请刷新页面

加载更多

阿里云手动搭建k8s搭建中遇到的问题解决(持续更新)

阿里云手动搭建k8s搭建中遇到的问题解决(持续更新) 参考文章: (1)阿里云手动搭建k8s搭建中遇到的问题解决(持续更新) (2)https://www.cnblogs.com/charlieroro/p/8450102.html 备忘一...

osc_r94nrknb
1分钟前
0
0
在IntelliJ IDEA中多线程并发代码的调试方法

通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法。让你在多线程开发过程中的调试更加的有的放矢。 我们将通过一个例子来学习。在这里,我编...

fightinging
2分钟前
0
0
Oracle使用PLSQL导入数据后中文乱码的解决方法

Oracle使用PLSQL导入数据后中文乱码的解决方法 参考文章: (1)Oracle使用PLSQL导入数据后中文乱码的解决方法 (2)https://www.cnblogs.com/yzhyingcool/p/10431137.html 备忘一下。...

osc_4punxmqt
2分钟前
0
0
ATFX安全知识:亏损形成或因偏见,勿被认知所骗

在汇市中,有一些人尽管有多年的投资交易经验,却总是与盈利无缘。如果归咎于交易水平不够,明显是很勉强的。是心态不对吗?可能也不是。其根本就在于没有分清外汇交易的本质,其潜意识里将投...

osc_ufe2hk4l
3分钟前
0
0
编码的浪漫:完美序列化的官方评测

在北银河65000个共和星,Zipack就像一台以可控核聚变驱动的永续型发动机,动力强劲,没有一丝赘肉。 西伯利亚大橘猫 Zipack VS MessagePack 虽然以前使劲吹过MessagePack,认为它是JSON的完美...

失败人士
9分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部