查找通过setsid创建的进程组ID

问题描述 投票:0回答:1

在shell脚本中,我看到使用setsid,我们可以创建一个新的进程组。我无法在创建后找到可靠的方法来获取组ID。我的要求很简单,启动一个进程,完成后,清理任何后代(如果有的话)。我不想杀死主进程,因此我必须等待主进程结束。之后,如果我以某种方式获得了组ID,我可以杀死剩余的子进程。这可以用kill - -pgid完成。缺少的部分是如何获得组ID?

linux kill setsid
1个回答
0
投票

这个脚本是我最终提出的。希望这有助于某人。 $!将给出pid,并且必须使用ps来找到它的gid。使用ps时前面有一个额外的空间,下一行变量扩展会移除前导空格。最后,在等待主要进程后,它会杀死该组。

#!/bin/sh -x
setsid "$@"  &
pid=$!
gidspace=$(ps -o pgid= $pid)
gid="${gidspace## }"
echo "gid $gid"
echo "waiting"
wait $pid
ps -s $gid -o pid,ppid,pgid,command
kill -- -$gid 
© www.soinside.com 2019 - 2024. All rights reserved.