2016-08-14 7 views
3

Этот вопрос является продолжением для this question.Вызов setid() при proc, созданный posix_spawn()

Когда команда Баша выдаются posix_spawn() я получаю сообщение:

Баша: нет управления заданий в этой оболочке

Я думаю, это потому, что в вилке последовательности есть вызов к function setsid(), и я не знаю, как имитировать эту операцию при использовании posix_spawn().

Есть ли способ сделать новую сессию для процесса bash?

ответ

0

Вы не можете. Он не является частью текущего интерфейса posix_spawn. Добавление этого вопроса обсуждалось в http://austingroupbugs.net/view.php?id=1044 , и, по-видимому, по крайней мере одна реализация (QNX) предоставляет в качестве расширения POSIX_SPAWN_SETSID, но для обеспечения соответствия стандарту вам необходимо использовать fork.

Использование fork не должно быть проблемой, если родительский процесс мал, поэтому я думаю, что, чтобы получить лучшее из обоих миров, вы могли бы использовать posix_spawn запустить небольшой вспомогательный двоичный, что forks и вызывает setsid. IMO, используя setsid, должно быть достаточно редким, чтобы небольшая дополнительная стоимость двойного исполнения была незначительной.