После того как процесс был запущен, он не может получить дополнительные полномочия. Таким образом, Вы не можете получить состав группы посреди сценария. Можно запустить целый скрипт с дополнительным составом группы:
newgrp test_grp1
/path/to/script
Вы не можете изменить свой реальный GID середина сценария. Если Вы действительно нуждаетесь в этом, переключаетесь на язык, где Вы можете, такие как Perl. Редко должно изменить Ваш реальный GID, хотя, так как это не имеет значения очень. Обычно достаточно выполнить случайный вызов к chgrp
(создайте файлы без полномочий группы сначала, затем работайте chgrp
, затем добавьте полномочия группы; при создании файлов с полномочиями группы существует состояние состязания: пользователь, который находится в первой группе, мог открыть файл, прежде чем у Вас будет время для выполнения chgrp
).
Оказывается, что моя проблема не была тем, что я действительно думал, что это было. Ниже сценарий, который ведет себя как psuedo-код выше. Это функционирует точно, как я ожидал (хотя немного изобретенный, чтобы быть простым), и хороший пример наличия отдельных прерываний сигнала для родительского и дочернего процесса оболочки.
Эта функциональность прерывания может быть продемонстрирована, просто запустив скрипт и выйдя ctrl-c.
#!/bin/bash
function endEarly {
echo "Terminating early"
if [ ! -z $SUBSHELL_PID ] ; then
echo "Killing subshell with pid $SUBSHELL_PID"
kill $SUBSHELL_PID
fi
exit
}
trap endEarly SIGTERM SIGINT
echo "Give me some input"
while [ 1 ] ; do
read INPUT
# kill the subshell if it exists and is running
if [ ! -z $SUBSHELL_PID ] ; then
kill -0 $SUBSHELL_PID
if [ $? -eq 0 ] ; then
kill $SUBSHELL_PID
fi
fi
echo "Now I'll repeat your input. Feel free to change it"
echo "at any time by typing it again and hitting <Enter>"
{
(
while [ 1 ] ; do
echo "$INPUT"
sleep 5
done
) &
CHILD_PID=$!
trap "kill $CHILD_PID;" SIGTERM SIGINT
wait $CHILD_PID
} &
SUBSHELL_PID=$!
done
kill -0 $pid
говорит Вам, если существует процесс с этим PID, он не говорит Вам, является ли это процессом, который Вы имеете в виду. Я не советую этому в производственной программе: рано или поздно это приведет к Вашему уничтожению несвязанного критического процесса, это снова использовало PID. – Gilles 'SO- stop being evil' 25.05.2011, 00:12