我正在运行这些命令:
ps -ef | awk -v piddd="$child_pid" '$2 ~ /\<piddd\>/ { print $3; }'
ps -ef | awk -v piddd="$child_pid" '$2 ~ /piddd/ { print $3; }'
它没有给我任何结果。当我尝试这个时,我得到了我需要的东西,虽然在某些情况下我会得到额外的pid:
ps -ef | awk -v piddd="$child_pid" '$2 ~ piddd { print $3; }'
第一个出了什么问题?
答案 0 :(得分:2)
您不能使用/pattern/
语法的变量。
如果你想添加单词边界(并且你的awk版本支持语法),你可以通过连接字符串来实现:
ps -ef | awk -v piddd="$child_pid" '$2 ~ "\\<" piddd "\\>" { print $3 }'
请注意,在这种情况下必须转义\
。
如果你只想让整个字段与确切变量匹配,我建议使用简单的字符串比较:
ps -ef | awk -v piddd="$child_pid" '$2 == piddd { print $3 }'
答案 1 :(得分:1)
不需要解析ps
实用程序的输出,只是为了获得子PPID
的父pid PID
。 ps
实用程序已提供此功能。
ps -o ppid= -p $child_pid
参数-o ppid=
告诉ps
只打印父pid。如果没有=
,则打印输出将包含标题PPID
。
参数-p $child_pid
告诉ps
从变量$child_pid
标识的流程ID中获取流程信息。
答案 2 :(得分:0)
ps -ef | awk '$2 ~ /'`echo "$child_pid"`'/ { print $3; }'
# or
ps -ef | awk '$2 ~ /'$child_pid'/ { print $3; }'
# or create function
function father_pid() { ps -ef | awk '$2 ~ /'$1'/ { print $3; }'; }
# use function
father_pid $child_pid