跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Linux 命令 grep, awk 执行疑惑
未分類
21 7 月 2020

Linux 命令 grep, awk 执行疑惑

Linux 命令 grep, awk 执行疑惑

資深大佬 : fangcan 23

脚本如下:检测 tomcat 是否启动,如果启动则停掉 tomcat
pid=`ps -ef|grep tomcat |grep -v grep |awk ‘{printf $2}’`
echo “pppp:${pid}”
if [ “$pid” != “” ] ; then
echo “shutdown tomcat …”
… 后面省略

背景:tomcat 没有启动

步骤如下:
1. 单独拿 ps -ef|grep tomcat |grep -v grep |awk ‘{printf $2}’ 执行返回空
2. 执行脚本 pid 却能打印出进程号

求大佬们看下 为什么 pid 能打印出进程号?

大佬有話說 (20)

  • 資深大佬 : dingwen07

    开调试模式看看到底执行了什么

  • 資深大佬 : goofool

    你的脚本名字叫 tomcatxxx 吧

  • 資深大佬 : neighbads

    tomcat 过滤一般选 java 吧,进程名不一定带 tomcat,所以直接执行返回空。

    执行脚本返回 pid 是因为 你的脚本名字是 带 tomcat 的?

  • 資深大佬 : senninha

    脚本名是不是包含关键字 tomcat ?直接脚本里输出一下这个命中的进程 id 是属于哪个进程的就好了。

  • 資深大佬 : singerll

    2 让我想起了上次有兄弟在这问,为何总有个 grep 进程每次都不一样还杀不掉。

  • 主 資深大佬 : fangcan

    @goofool
    @senninha
    脚本名确实包含 tomcat , 为什么有包含就不行?

  • 資深大佬 : kiwi95

    找进程用 pgrep 不要用 grep

  • 主 資深大佬 : fangcan

    @goofool
    @senninha
    好像明白了 ..

  • 資深大佬 : kiwi95

    @fangcan 脚本在执行本身也是进程

  • 主 資深大佬 : fangcan

    感谢各位大佬解答

  • 主 資深大佬 : fangcan

    @kiwi95 嗯,搞清楚了 感谢

  • 資深大佬 : lxk11153

    @fangcan #6
    1. 你自己执行的 命令 /脚本 所产生的进程也会进 ps 的输出的啊,你比如`ps -ef –forest|less -S`
    _ bash
    __ _ ps -ef –forest
    __ _ less -S
    假设你脚本叫 tomcat.sh ,你运行后,进程里肯定有`bash tomcat.sh`这一条, 所以你脚本里`ps -ef|grep tomcat`就会出来`bash`这个进程。应该加上一些其它关键字来进一步筛选进程,你比如说
    `telnet v2ex.com 80` `telnet v2ex.com 443` 搜 443 就不能用`grep telnet`来筛选了

    2. 2020 年了,找进程`grep tomcat |grep -v grep`太不优雅了,请用 pgrep/pkill

  • 資深大佬 : lululau

    用 systemd, supervisor 之类的管理,不要重复造轮子

  • 資深大佬 : lxk11153

    @lululau #13 systemd 在 macos 里 对应哪个系统命令?

  • 資深大佬 : Superheroes

    jps |grep Bootstrap |awk ‘{printf $1}’

  • 資深大佬 : no1xsyzy

    @lxk11153 #14 systemd 不是系统命令,是自己去写 unit,然后用 systemctl 处理。
    对应 macos 需要自己写 plist 文件,具体放哪我不记得了……

  • 資深大佬 : cattyhouse

    改一下:

    pid=`ps -ef|grep -w tomcat |grep -v grep |awk ‘{printf $2}’`

    ‘-w’ 是说匹配整个关键字

  • 資深大佬 : cattyhouse

    还有你可以用 pid=$(pgrep -x tomcat)

    ‘-x’ Only match processes whose names (or command line if -f is specified) exactly match the pattern.

  • 資深大佬 : lululau

    @lxk11153 launchd,前端命令是 launchctl

  • 資深大佬 : yangbonis

    pidof,ps -C,cmdline 的二进制名和 comm 都不唯一的话,就让 systemd 管理吧。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具