1
dingwen07 2020-07-08 16:29:14 +08:00 1
开调试模式看看到底执行了什么
|
2
goofool 2020-07-08 16:31:03 +08:00 via Android 1
你的脚本名字叫 tomcatxxx 吧
|
3
neighbads 2020-07-08 16:32:56 +08:00 1
tomcat 过滤一般选 java 吧,进程名不一定带 tomcat,所以直接执行返回空。
执行脚本返回 pid 是因为 你的脚本名字是 带 tomcat 的? |
4
senninha 2020-07-08 16:33:22 +08:00 1
脚本名是不是包含关键字 tomcat ?直接脚本里输出一下这个命中的进程 id 是属于哪个进程的就好了。
|
5
singerll 2020-07-08 16:33:44 +08:00 via Android
2 楼让我想起了上次有兄弟在这问,为何总有个 grep 进程每次都不一样还杀不掉。
|
7
kiwi95 2020-07-08 16:42:01 +08:00 via iPhone 1
找进程用 pgrep 不要用 grep
|
10
fangcan OP 感谢各位大佬解答
|
12
lxk11153 2020-07-08 17:41:54 +08:00
@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 |
13
lululau 2020-07-08 17:46:11 +08:00
用 systemd, supervisor 之类的管理,不要重复造轮子
|
15
Superheroes 2020-07-08 18:40:49 +08:00
jps |grep Bootstrap |awk '{printf $1}'
|
16
no1xsyzy 2020-07-08 19:07:22 +08:00
@lxk11153 #14 systemd 不是系统命令,是自己去写 unit,然后用 systemctl 处理。
对应 macos 需要自己写 plist 文件,具体放哪我不记得了…… |
17
cattyhouse 2020-07-08 19:12:25 +08:00
改一下:
pid=`ps -ef|grep -w tomcat |grep -v grep |awk '{printf $2}'` '-w' 是说匹配整个关键字 |
18
cattyhouse 2020-07-08 19:15:15 +08:00
还有你可以用 pid=$(pgrep -x tomcat)
'-x' Only match processes whose names (or command line if -f is specified) exactly match the pattern. |
20
yangbonis 2020-07-08 20:14:01 +08:00 via iPhone
pidof,ps -C,cmdline 的二进制名和 comm 都不唯一的话,就让 systemd 管理吧。
|