поиск идентификатора группы процессов, созданного с помощью setsid - PullRequest
0 голосов
/ 12 апреля 2019

В сценарии оболочки я вижу, что с помощью setsid мы можем создать новую группу процессов.Я не могу найти надежный способ получить идентификатор группы после создания.Мое требование простое - запустить процесс, а после этого очистить любого потомка (если есть).Я не хочу убивать основной процесс, поэтому мне приходится ждать завершения основного процесса.После этого я могу уничтожить оставшиеся дочерние процессы, если я каким-то образом получил идентификатор группы.что можно сделать с помощью kill - -pgid.Недостающий кусок, как я могу получить идентификатор группы?

1 Ответ

0 голосов
/ 14 апреля 2019

Этот сценарий - то, что я придумала наконец.Надеюсь, это кому-нибудь поможет.$!даст 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 
...