linux脚本中的ps等命令问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux脚本中的ps等命令问题相关的知识,希望对你有一定的参考价值。

脚本代码如下:
ps -eaf |grep tomcat |grep -v grep >/dev/null 2>&1
if [ $? -eq 0 ]; then
echo "tomcat is running!"
exit 0;
else
echo "tomcat is not running!"
exit 1;
fi
第一行是什么意思,grep -v这参数不理解
if [ $? -eq 0 ]是什么意思,也麻烦解释下啊

参考技术A ps -eaf |grep tomcat |grep -v grep >/dev/null 2>&1

分为4段

1、ps -eaf 查看当前进程,-e 显示所有进程,a显示终端上的所有进程,包括其他用户的进程,f 全格式。


2、显示的结果通过管道“|”传给第二段 grep tomcat,查找tomcat进程。


3、同样查找的结果传给第三段 grep -v grep,-v 不显示匹配的行,因为用grep查询tomcat的时候也算一个进程,而ps的时候该进程信息中也包含了tomcat,例如:

root      2317  0.0  0.0   5980   744 pts/4    S+   15:00   0:00 grep tomcat

所以用grep -v grep把这条过滤掉。


4、第四段 >/dev/null 2&>1,将显示结果(默认是正确输出,即1)重定向到/dev/null中去,2代表错误输出,也和1一样。Linux中0代表输入stdin,1代表输出stdout,2代表错误输出stderror。


每运行一个命令,该命令都会有一个返回值给shell,你可以在终端中试试ls,然后echo $?查看返回值,肯定是0,如果ls 一个不存在的文件,再看,肯定不是0。以此判断上一条命令是否执行成功。

 if [ $? -eq 0 ]; then

判断上一条命令的返回值是否等于(-eq) 0,即是否运行成功。

本回答被提问者和网友采纳
参考技术B -v, --invert-match select non-matching lines
grep -v 选择的是不匹配的行(反转查找)。

$? ----上一个代码或者shell程序在shell中退出的情况,如果正常退出则返回0,反之为非0值。

比较字符:-eq -- 等于 。
参考技术C grep -v是反向排除

if [ $? -eq 0 ]是如果上一步执行成功了,即搜索到东西了

linux shell脚本执行命令时创建子进程问题(特定的情况,例如后台运行管道分支或子shell等,脚本可能会创建子进程执行命令)

Shell脚本在执行每个命令时,不一定会创建子进程。
在大多数情况下,每条命令都在主进程中依次执行,不会创建子进程。
但是,当遇到特定的情况,例如后台运行、管道、分支或子shell等,脚本可能会创建子进程。

我说怎么在执行ps -ef | grep的过程中去grep脚本名,就会多一个进程。。。

以上是关于linux脚本中的ps等命令问题的主要内容,如果未能解决你的问题,请参考以下文章

linux在执行命令ok,但是写入脚本就错误,怎么解

linux shell脚本执行命令时创建子进程问题(特定的情况,例如后台运行管道分支或子shell等,脚本可能会创建子进程执行命令)

linux shell脚本执行命令时创建子进程问题(特定的情况,例如后台运行管道分支或子shell等,脚本可能会创建子进程执行命令)

Linux Shell脚本的执行过程

怎样将多条linux命令写成shell脚本顺序执行

如何在命令行执行 powershell 脚本