2015-08-20 1 views
1

J'essaye d'exécuter un shell bash dans nodejs - que je travaille, sauf pour le contrôle des tâches. Je suis assez sûr que c'est parce que le processus engendré n'est pas mis au chef de processus. En C, j'ai été capable de le faire en appelant setsid(). Dans nodejs, j'ai lu que l'équivalent est de définir l'option 'setsid: true' lors de la création du nouveau processus. Je l'ai fait comme ça:Nodejs setsid() équivalent

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

Cependant, je reçois toujours le message "pas de contrôle de travail dans ce shell".
Exemple de sortie, après l'attribution 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$ 

Donc, en résumé, mes questions sont les suivantes:
- est-ce la bonne façon de définir l'identifiant de session du nouveau processus? Et si oui, comment puis-je vérifier définitivement qu'il le fait correctement (comme il me semble que ce n'est pas le cas - c'est la seule chose que j'imagine ne causerait aucun contrôle de travail, car la commande tty est la preuve que pty a été configuré correctement).
- Si cette méthode ne fonctionne pas, existe-t-il des alternatives à setsid() qui n'impliquent pas le téléchargement d'un module? J'écrirai un addon C++ s'il n'y en a pas.
Merci pour toute aide!

Répondre