我正在解析输出ps
,我不需要父进程的所有子进程
/usr/bin/postgres -D /var/lib/pgsql/data -p 1488
\_ postgres: logger process
\_ postgres: checkpointer process
\_ postgres: writer process
\_ postgres: wal writer process
\_ postgres: autovacuum launcher process
\_ postgres: stats collector process
有没有办法只显示
/usr/bin/postgres -D /var/lib/pgsql/data -p 1488
ps
除了仪器之外,还有其他方法可以列出所有正在运行的父进程吗?
答案1
要使用该命令仅列出父进程而不列出子进程ps
,可以使用该--ppid
选项和-o
标志来格式化输出:
ps --ppid 2 -o pid,cmd
此命令将仅列出父进程 ID (PPID) 为 2 的父进程,这通常是 init 进程的 PID。-o pid,cmd 选项指定仅显示 PID 和命令列。另一种方法是使用 pgrep 和 -P 选项根据父 PID 列出进程:
pgrep -P 2
此命令将列出父 PID 为 2 的进程的 PID。如果要从输出中排除 ps 命令本身,可以添加 grep -v 将其过滤掉:
ps --ppid 2 -o pid,cmd | grep -v "ps --ppid"
有很多方法可以做到,但这些是最简单的。