“ps -o pgid”的奇怪行为

“ps -o pgid”的奇怪行为

简介:我有一个守护进程,它生成进程,我必须优雅地停止它。我在网上找到的基于pgid的解决方案:

group_id=$(ps -o pgid= $(cat $pidfile))
if [ ! -z $group_id ]; then
        kill -- -$group_id
    success
fi

我想知道它是如何工作的。我遇到的第一件事是获取 group_id。我不明白这里发生了什么:

$ ps -o pgid= 21814
21813

$ ps -o pgid=21814
21814
3525
5180

但看来,我真的需要第一个例子,在“=”后有空格:

$ pstree -p | grep 21814
     |-python(21814)-+-python(21815)-+-{python}(21813)

谁能解释一下这是怎么回事?该示例的输出我得到什么?

答案1

格式标志 ( -o format) 后面的等号禁止打印标题,该标题指定作为输出生成的选项列。这可以测试 null(空)结果。

默认情况下,ps选择与终端会话的当前用户具有相同有效用户 ID 的所有进程。在符号后面指定感兴趣的 PID=可以推断标题行包含该 PID。报告的其他进程是终端会话的进程bash以及ps进程本身。如果您这样做,您可以看到这一点:

ps -o comm,pgid=21814

相关内容