2012-06-20 5 views

ответ

8

Сессия представляет собой набор процессов, которые имеют управляющий терминал. setid полезен, когда вы хотите начать новый сеанс, потому что вы начали подключаться к новому терминалу - например, при запуске оболочки внутри эмулятора терминала - или вам нужен демон (который вы не хотите быть связанными с управляющим терминалом).

Лучшее объяснение, которое я знаю об этом аспекте, находится в R.W. Stevens Расширенное программирование в среде Unix.

-1

Это полезно как часть становления daemon, т. Е. Отсоединение процесса от управляющего терминала. См. Также daemon(3).

7

Why do we need to group processes? Рассмотрите ситуацию, в которой вы хотите отключиться, и которая включает отправку сигнала вашим детям. Существует неотъемлемое состояние расы: SIGCHLD не получен, поэтому вы знаете, что ребенок все еще жив. Поэтому вы посылаете сигнал. Но ребенок завершается до отправки сигнала, а другой (несвязанный) процесс запускается и получает тот же pid, что и ребенок, которому был отправлен сигнал. Затем сигнал переходит к новому, несвязаному процессу. Это плохо. Таким образом, вместо того, чтобы посылать сигнал на конкретные pids, вы сигнализируете группу процессов. Когда ребенок умирает, а новый процесс начинается с исходного pid, новый процесс - , а не - часть группы процессов и описанная выше проблема избегают.

+0

Я знаю, что это старый, но: ваш ответ не совсем корректен. Как правило, нет никакого условия гонки в убийстве дочерних процессов, потому что дочерний процесс, который заканчивается, зависает как процесс «зомби» (и его pid не будет повторно использоваться), пока вы не пожнете его, вызвав «wait» или «waitpid» или аналогичный. Таким образом, если вы отправляете сигнал о завершении, а затем «waitpid», условия гонки отсутствуют. Единственное исключение - вы установили действие SIGCHLD на «игнорировать», и в этом случае дочерние процессы могут отмирать, не требуя вызовов 'wait'. – davmac

+0

(Кроме того, речь идет о 'setsid', который создает листинг _session, а не только группу процессов. AFAIK не имеет возможности атомарно сигнализировать весь сеанс). – davmac

+0

@davmac Состояние гонки, о котором я рассказываю, происходит, когда такого рода попытки предпринимаются в сценарии оболочки, а сценарий-писатель не имеет уровня контроля, необходимого для управления при вызове wait. Однако вы делаете отличную оценку. –

 Смежные вопросы

  • Нет связанных вопросов^_^