Может ли кто-нибудь посоветует, как создать новый процесс на Linux, используя новый идентификатор группы процессов в оболочке UNIX от UNIX? Большое вам спасибо!Как обработать процесс на linux с помощью нового идентификатора группы процессов в BASH
ответ
Чтобы выполнить команду, например «Emacs xxx.txt», в новой группе процессов, из командной строки т.е. в интерактивном режиме:
setsid emacs xxx.txt &
Как описано в «командной setsid Linux» связаны между собой, поведение команды setsid может быть неожиданным (и в Linux, который я использую, теперь man-страница вообще не помогает). Так что ...
Если вы хотите, чтобы породить команду из сценария и иметь команду продолжить после того, как скрипт завершает, двойной setsid:
setsid setsid emacs xxx.txt
... Рассуждение :
когда Баш вызывает setsid во время сценария, setsid сохраняет процесс группового идентификатора процесса интерпретатора Баша, и так:
setsid emacs xxx.txt
... блоки (см. Связанную статью). Но это установить новую группу процессов перед запуском Emacs
вы можете фоне его '&':
setsid Emacs xxx.txt &
...но это оставляет условие гонки, когда вызывающий скрипт может выйти до того, как фоновый процесс достигнет точки, в которой setsid изменяет группу процессов (что может убить подпроцесс)
- , поэтому мы хотим дождаться изменения группы процессов ; вложенная setsid гарантированно раскошелиться, потому что внешний setsid не является лидером группы процессов, и уже есть новый идентификатор группы процесса установки наружной setsid
т.е. когда мы удваиваем setsid последовательность такова:
- Баш вилы ребенок 1, оставляя его в группе процессов BASh в
- ребенок 1 Execs setsid
- ребенка 1 setsid видят это не является лидер группы, и поэтому вызывает setsid системного вызова (что создает новую сессию и дает ребенок 1 новый групповой процесс) , а затем EXECS внутреннего setsid
- внутренний setsid видит является лидером группы, так вилы ребенок 2, ребенок 1 выходит
- ребенок 2 видит, что это не лидер группы так называет setsid системного вызова (который создает новый сеанс и дает ребенку 2 новый процесс группы), а затем EXECS Emacs
от в сценарии, если вы хотите общаться с командой и ждать его, чтобы выйти из, см. подпроцесс в man-странице bash.
Возможный дубликат [linux command setsid] (http://stackoverflow.com/questions/9677306/linux-command-setsid) –