2015-08-20 5 views
1

Я пытаюсь выполнить оболочку bash в nodejs - у меня есть работа, кроме управления заданиями. Я уверен, что это связано с тем, что порожденный процесс не устанавливается лидером процесса. В C я смог сделать это, вызвав setid(). В nodejs я читал, что эквивалент устанавливает параметр «setsid: true» при нерестах нового процесса. Я сделал это так:Nodejs setsid() эквивалент

var child = spawn('/bin/bash', ['--login'], {stdio: [this.slave, this.slave, this.slave], env: {"TERM": "vt100"}, setsid: true}); 

Однако я до сих пор получаю сообщение «без контроля работы в этой оболочке».
Пример вывода, после выделения PTy ttys002:

bash: no job control in this shell 
Amandas-MacBook-Pro:puffshell amanda$ tty 
/dev/ttys002 
Amandas-MacBook-Pro:puffshell amanda$ 
Amandas-MacBook-Pro:puffshell amanda$ ps 
    PID TTY   TIME CMD 
    2055 ttys000 0:00.05 -bash 
    2158 ttys000 0:00.01 /bin/bash 
    2170 ttys000 0:00.11 puffd 
    2171 ttys000 0:00.01 /bin/bash --login 
Amandas-MacBook-Pro:puffshell amanda$ 

Таким образом, в общем, мои вопросы:
- это правильный способ установить идентификатор сессии нового процесса? И если да, то как я окончательно проверю, что это на самом деле делает это правильно (как мне кажется, это не так - это единственное, что я мог бы себе представить, не будет контролировать работу, поскольку команда tty является доказательством того, что pty был настроен правильно).
- Если этот метод не работает, существуют ли альтернативы setid(), которые не связаны с загрузкой модуля? Я напишу аддон C++, если его нет.
Спасибо за помощь!

ответ

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