改进版的ps
这两天把我的玩具服务器里的各个应用封装到docker来ALLINBOOM了,这就有一个很讨厌的问题,ps一下,docker里的进程全冒出来了,一堆nginx,一堆pg什么的,看着特烦。
搓了很久,终于搓出来了个新的ps(alias),它只显示宿主机的进程,然后也支持 ps -ax 和 ps -ef 等最常见的参数。
我就不说怎么用了,需要的人自然会用,不需要的人也别玩这个。
psh() {
local mypid=$$
command ps "$@" | awk -v mypid="$mypid" '
function is_docker(pid) {
cmd = "grep -qE \"docker|containerd|kubepods\" /proc/" pid "/cgroup 2>/dev/null"
return (system(cmd) == 0)
}
function is_child_of_shell(pid) {
cmd = "pgrep -P " mypid " 2>/dev/null | grep -q \"^" pid "$\""
return (system(cmd) == 0)
}
function get_pid_from_line() {
if (NF >= 2 && $2 ~ /^[0-9]+$/) {
return $2 # ps -ef, ps aux format
} else if ($1 ~ /^[0-9]+$/) {
return $1 # ps -ax format
}
return ""
}
NR == 1 { print; next }
{
pid = get_pid_from_line()
if (pid != "" && pid != mypid && !is_docker(pid) && !is_child_of_shell(pid)) {
print
}
}'
}
alias ps='psh'