将awk输出作为输入传递给另一个脚本

时间:2013-10-22 14:16:55

标签: linux awk grep

下面我尝试提取正在运行的进程的pid以检查其当前ppid

ps -p 1111 -o ppid = $(ps -eo pid,args | awk '/PRD_/ && /startscen\.sh/ && $8 ~ /<string>/' | awk -F" " '{print $1}')

我的脚本错了。还有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

确实

ps -ef |  awk '/PRD_/ && /startscen\.sh/ {print $3}'

给你你想要的?在CMD字符串中搜索具有“PRD_”和“startscen.sh”的进程,并报告PPID。如果你想运行一个额外的ps来获取父母的信息,

ps -p `ps -ef |  awk '/PRD_/ && /startscen\.sh/ {print $3}'`

答案 1 :(得分:0)

要检查特定进程的ppid,请使用以下符号:

$ ps -p 1111 -o ppid=

这是关闭到你所拥有的,但请注意, ppid之后的等号是,没有空格。此等号不是表达式的一部分,其-o选项的功能是指定自定义标题。我已经包含了这个例子,你告诉ps根本不包含标题,所以输出将只是ppid而不是其他内容。例如,尝试ps -p 1 -o ppid=Hello

如果我正确读取此内容,示例代码的其余部分似乎与您的实际问题无关,并且尝试收集正在运行的shell脚本的pid。所以...作为这个答案的补充,我对这一点的建议是修改shell脚本,使其在某处记录它自己,这样你就不必依赖解析进程表来找到它。例如,您可以在startscen.sh顶部附近添加一些如下所示的内容:

pidfile="/var/run/`basename $0`.pid"
if [ -s "$pidfile" ]; then
    if ps "$(cat $pidfile)" >/dev/null; then
        echo "ERROR: already running, giving up." >&2
        exit 1
    fi
fi
trap "rm -f pidfile" 0 1 2 3 5 15
echo $$ > $pidfile

这并不完美,但这会为您提供一些防止同时运行脚本的保护,并将正在运行的脚本的pid存储在其他pid所在的文件中。