简介:我有一个守护进程,它生成进程,我必须优雅地停止它。我在网上找到的基于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