首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个PID存储在PID文件中

多个PID存储在PID文件中
EN

Stack Overflow用户
提问于 2016-11-01 20:12:45
回答 2查看 1.4K关注 0票数 1

我开发了一个System init脚本,它启动了一个Java程序。由于某种原因,每当创建PID文件时,它都包含多个PID,而不是一个。

下面是启动服务并写入PID文件的相关代码:

代码语言:javascript
复制
daemon --pidfile=$pidfile "$JAVA_CMD &" >> $logfile 2>&1
RETVAL=$?
usleep 500000

if [ $RETVAL -eq 0 ]; then
    touch "$lock"

    PID=$(ps aux | grep -vE 'grep|runuser|bash' | grep <myservice> | awk '{print $2}')

    echo $PID > $pidfile

当我手动测试ps aux...命令时,一行将返回。在作为脚本运行时,此调用似乎正在返回多个PID。

PID文件中的示例内容:16601 16602 16609 16619 1669016619是在手动运行上面提到的ps aux...命令时找到的实际进程ID。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-01 20:16:24

试着倒转你的酒杯。第一个(-vE)可以在启动myservice之前运行。Grep首先用于您的服务,然后过滤掉不需要的行:

代码语言:javascript
复制
PID=$(ps aux | grep <myservice> | grep -vE 'grep|runuser|bash' | awk '{print $2}')
票数 2
EN

Stack Overflow用户

发布于 2021-06-30 02:27:33

我说的是同一个问题,但不是同一句话,它是这样的:

代码语言:javascript
复制
PID="$(ps -ef|grep command|grep options|grep -v grep|awk '{print $2}')"

在其中,我使用了与@Marc在第一次回答中相同的grep顺序,但没有过滤掉所有不想要的行。所以我试了下一个,它成功了:

代码语言:javascript
复制
PID="$(ps -ef|grep command|grep options|grep -vE 'grep|runuser|bash'|awk '{print $2}')"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40367902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档