如何仅显示/ proc文件中的Sleeping(S)进程? 我只想使用/ proc / status目录显示正在休眠的进程。 我尝试使用egrep,但似乎无法正常工作。
答案 0 :(得分:1)
要列出所有进程的pid,请使用:
ps -eo s,pid
它显示了过程状态及其PID。
要仅过滤睡眠过程,可以使用awk:
ps h -eo s,pid | awk '{ if ($1 == "S") print $2; }'
答案 1 :(得分:1)
/ proc / $ PID /中有一个名为状态的文件,您可以像这样grep
status=sleeping
for pid in /proc/[0-9]*; {
state=$(grep $status $pid/status)
[[ $state ]] && echo ${pid//'/proc/'/}
}
或使用变量替换
pids=( $(grep -l $status /proc/*/status) ); echo ${pids[@]//[!0-9]/}
答案 2 :(得分:1)
如果您不希望使用完整的文件名路径,而只希望使用PID的完整路径,请尝试awk
。
$: awk '/sleeping/{ $0=FILENAME; gsub(/[^0-9]/, ""); print $0 }' /proc/[0-9]*/status
这是一个高效的过程,遍历所有文件,仅输出一组适合捕获到数组中的PID。
当然,如果您愿意,也可以通过这种方式获取完整路径-
$: awk '/sleeping/{ print FILENAME }' /proc/[0-9]*/status
或使用sed
$: sed -n '/sleeping/F' /proc/[0-9]*/status
但是这些基本上与grep -l sleeping /proc/[0-9]*/status
建议的KamilCuk一样。
如果您只是真的想要一个合理有效的仅bash版本,请使用Ivan的改版工具:
$: for proc in /proc/[0-9]*/status
do case "$(<$proc)" in
*sleeping*) echo "${proc//[^0-9]/}" ;;
esac
done
答案 3 :(得分:0)