文档章节

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

QH_C
 QH_C
发布于 2015/11/17 22:43
字数 1019
阅读 15
收藏 0
点赞 0
评论 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
粉丝 1
博文 75
码字总数 69153
作品 0
朝阳
程序员
嵌入式Linux学习基础规划篇

嵌入式的学习是需要日积月累的,是通过一点一滴的积累才能成为大神。下面来介绍一下嵌入式linux学习基础规划,目标是达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质...

创客学院
04/10
0
0
Day24 shell环境变量

管道符和作业控制 管道符:| 用于将前一个指令的输出作为后一个指令的输入。 作业控制:主要用于命令进程的控制 CTR+Z:暂停当前运行的进程 fg:命令恢复(前台),加数字能够指定恢复的进程;...

杉下
06/30
0
0
学习shell脚本之前的基础知识一

日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写shell脚本,那么 你就不算一个合格的管理员。目前很多单位在招聘linux系统管理员时,shell脚本的编写是 必考的项目。有的单位...

天行健J
2012/11/30
0
0
[原创]Bash中的test,[,[[ 有什么区别

在Bash中,test, [, [[ 都可以用来对一个布尔表达式进行求值,比如: 一般情况下,三者的效果是一样的,但细节上存在差别 在大多数的Shell中, test和[ 是等价的(除了个别比较古老的Bourne Shel...

mj4738
2011/11/25
0
0
通过shell存储网页到memcache

memcached最大能保存1M的数据,因此对于小的文本文件是完全可行的。 脚本函数如下,将天气预报网的某城市JSON数据保存到memcache中: function cacheData(){expir=18000mem='10.10.10.10'tmp...

cwalet
2013/06/14
0
0
面向 Linux 和开源爱好者的书单

看看我们现在在读什么? 最近我在作者社区征集分享大家正在读的书。大家生活阅历和工作岗位各不相同,共同点是每天都与 Linux 和开源打交道。 享受这份不可思议的书单吧,其中大部分是免费的...

04%
06/26
0
0
Linux shell 程序设计1——安装及入门

1、什么是shell? shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用户结果。与windows命令提示符不同的是,she...

宅蓝三木
2014/04/24
0
0
8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee

五周第五次课 8.10 shell特殊符号cut命令 8.11 sortwcuniq命令 8.12 teetrsplit命令 8.13 shell特殊符号下 8.10 shell特殊符号cut命令 cut命令 8.11 sortwcuniq命令 sort-wc-uniq命令 特殊符...

wb_rambo123
01/12
0
0
Linux多线程并发服务器编程(线程池,FTP服务器)

分享网盘下载:https://pan.baidu.com/s/1gfNCcXt 密码: irfk 内容简介 本课程从最基础的进程、线程概念讲起逐步深入,通过理论与实践结合的方式,使学员快说掌握linux多线程网络编程技术,并...

人气王子333
06/26
0
0
五周五次课

8.10 shell特殊符号cut命令 8.11 sortwcuniq命令 8.12 teetrsplit命令 8.13 shell特殊符号下 相关测验题目:http://ask.apelearn.com/question/5437 扩展 1. source exec 区别 http://alsww......

河图再现
01/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部