这两天把我的玩具服务器里的各个应用封装到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'

标签: none

添加新评论

*如果只是需要与我沟通联系,请telegram @lostshitbot, 而不要用评论方式,因为没有你的个人资料,我无法回复及联络你。

* 因技术原因会延迟5秒,请按了提交后不要返回或者刷新