Уничтожьте процесс и вынудите его возвратиться 0 в Linux?

Полномочия являются вредителем.

В основном необходимо удостовериться, что все те разработчики могут записать во все в мерзавце repo.

Пропустите вниз к Решению Новой волны для превосходящего метода предоставления, что группа разработчиков пишет возможность.

Стандартное решение

При помещении всех разработчиков в особенно созданную группу можно, в принципе, просто сделать:

chgrp -R <whatever group> gitrepo
chmod -R g+swX gitrepo

Затем изменитесь umask для пользователей к 002, так, чтобы новые файлы были созданы с перезаписываемыми группой полномочиями.

Проблемами с этим является легион; если Вы находитесь на дистрибутиве, который принимает a umask из 022 (такие как наличие общего users группа, которая включает всех по умолчанию), это может открыть проблемы безопасности в другом месте. И рано или поздно, что-то собирается завинтить Вашу тщательно созданную схему полномочий, помещая repo неисправное, пока Вы не добираетесь root доступ и ремонтирует его (т.е. повторное выполнение вышеупомянутых команд).

Решение новой волны

Отличное решение — хотя менее хорошо понято, и который требует немного большей поддержки ОС/инструмента — состоит в том, чтобы использовать расширенные атрибуты POSIX. Я только приехал в эту область справедливо недавно, таким образом, мое знание здесь не является столь горячим, как это могло быть. Но в основном, расширенный ACL является способностью установить полномочия на больше, чем просто 3 слота по умолчанию (user/group/other).

Так еще раз создайте свою группу, затем работайте:

setfacl -R -m g:<whatever group>:rwX gitrepo
find gitrepo -type d | xargs setfacl -R -m d:g:<whatever group>:rwX

Это настраивает расширенный ACL для группы так, чтобы элементы группы могли читать/писать/получать доступ, любые файлы уже там (первая строка); затем, также скажите всем существующим каталогам, что новые файлы должны иметь этот тот же примененный ACL (вторая строка).

Надежда, которая получает Вас на Вашем пути.

16
задан 20 May 2012 в 12:09
5 ответов

Можно присоединить к процессу с помощью GDB и идентификатора процесса и затем выйти эти call команда с exit(0) как аргумент.

call позволяет Вам вызывать функции в рамках под управлением программы. Вызов exit(0) выходы с кодом возврата 0.

gdb -p <process name>
....
.... Gdb output clipped
(gdb) call exit(0)

Program exited normally.

Как короткий инструмент:

gdb --batch --eval-command 'call exit(0)' --pid <process id>
20
ответ дан 20 November 2019 в 22:49

Нет. Когда оболочка ловит SIGCHLD, она безусловно устанавливает возвращаемое значение соответственно на ненулевое значение, таким образом, это потребовало бы модификации или сценария или оболочки.

8
ответ дан 20 November 2019 в 22:49

Я m, не уверенный, но это выйдет с 0, если какой-либо из перечисленных сигналов будет получен. Вы могли выполнить другие действия включая вызывание функции, и т.д.

#!/bin/bash 
trap 'exit 0' SIGINT SIGQUIT SIGTERM
3
ответ дан 20 November 2019 в 22:49

Эта острота работала на меня:

/bin/bash -c '/usr/bin/killall -q process_name; exit 0'
3
ответ дан 20 November 2019 в 22:49

Немного hacky пути, но..

можно создать обертку к процессу, переопределив Обработчик SIGCHLD. Например:

#!/bin/bash
set -o monitor
trap 'exit(0)' CHLD
/some/dir/yourcommand

После этого можно сделать сценарий, выполняющий эту обертку вместо процесса путем помещения его ранее в $PATH и переименования к тому же имени.

2
ответ дан 20 November 2019 в 22:49

Теги

Похожие вопросы